1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
|
package dhcpv6
import (
"fmt"
)
// TransactionID is a DHCPv6 Transaction ID defined by RFC 3315, Section 6.
type TransactionID [3]byte
// String prints the transaction ID as a hex value.
func (xid TransactionID) String() string {
return fmt.Sprintf("0x%x", xid[:])
}
// MessageType represents the kind of DHCPv6 message.
type MessageType uint8
// The DHCPv6 message types defined per RFC 3315, Section 5.3.
const (
// MessageTypeNone is used internally and is not part of the RFC.
MessageTypeNone MessageType = 0
MessageTypeSolicit MessageType = 1
MessageTypeAdvertise MessageType = 2
MessageTypeRequest MessageType = 3
MessageTypeConfirm MessageType = 4
MessageTypeRenew MessageType = 5
MessageTypeRebind MessageType = 6
MessageTypeReply MessageType = 7
MessageTypeRelease MessageType = 8
MessageTypeDecline MessageType = 9
MessageTypeReconfigure MessageType = 10
MessageTypeInformationRequest MessageType = 11
MessageTypeRelayForward MessageType = 12
MessageTypeRelayReply MessageType = 13
MessageTypeLeaseQuery MessageType = 14
MessageTypeLeaseQueryReply MessageType = 15
MessageTypeLeaseQueryDone MessageType = 16
MessageTypeLeaseQueryData MessageType = 17
)
// String prints the message type name.
func (m MessageType) String() string {
if s, ok := messageTypeToStringMap[m]; ok {
return s
}
return fmt.Sprintf("unknown (%d)", m)
}
// messageTypeToStringMap contains the mapping of MessageTypes to
// human-readable strings.
var messageTypeToStringMap = map[MessageType]string{
MessageTypeSolicit: "SOLICIT",
MessageTypeAdvertise: "ADVERTISE",
MessageTypeRequest: "REQUEST",
MessageTypeConfirm: "CONFIRM",
MessageTypeRenew: "RENEW",
MessageTypeRebind: "REBIND",
MessageTypeReply: "REPLY",
MessageTypeRelease: "RELEASE",
MessageTypeDecline: "DECLINE",
MessageTypeReconfigure: "RECONFIGURE",
MessageTypeInformationRequest: "INFORMATION-REQUEST",
MessageTypeRelayForward: "RELAY-FORW",
MessageTypeRelayReply: "RELAY-REPL",
MessageTypeLeaseQuery: "LEASEQUERY",
MessageTypeLeaseQueryReply: "LEASEQUERY-REPLY",
MessageTypeLeaseQueryDone: "LEASEQUERY-DONE",
MessageTypeLeaseQueryData: "LEASEQUERY-DATA",
}
// OptionCode is a single byte representing the code for a given Option.
type OptionCode uint16
// String returns the option code name.
func (o OptionCode) String() string {
if s, ok := optionCodeToString[o]; ok {
return s
}
return fmt.Sprintf("unknown (%d)", o)
}
// All DHCPv6 options.
const (
OptionClientID OptionCode = 1
OptionServerID OptionCode = 2
OptionIANA OptionCode = 3
OptionIATA OptionCode = 4
OptionIAAddr OptionCode = 5
OptionORO OptionCode = 6
OptionPreference OptionCode = 7
OptionElapsedTime OptionCode = 8
OptionRelayMsg OptionCode = 9
// skip 10
OptionAuth OptionCode = 11
OptionUnicast OptionCode = 12
OptionStatusCode OptionCode = 13
OptionRapidCommit OptionCode = 14
OptionUserClass OptionCode = 15
OptionVendorClass OptionCode = 16
OptionVendorOpts OptionCode = 17
OptionInterfaceID OptionCode = 18
OptionReconfMessage OptionCode = 19
OptionReconfAccept OptionCode = 20
OptionSIPServersDomainNameList OptionCode = 21
OptionSIPServersIPv6AddressList OptionCode = 22
OptionDNSRecursiveNameServer OptionCode = 23
OptionDomainSearchList OptionCode = 24
OptionIAPD OptionCode = 25
OptionIAPrefix OptionCode = 26
OptionNISServers OptionCode = 27
OptionNISPServers OptionCode = 28
OptionNISDomainName OptionCode = 29
OptionNISPDomainName OptionCode = 30
OptionSNTPServerList OptionCode = 31
OptionInformationRefreshTime OptionCode = 32
OptionBCMCSControllerDomainNameList OptionCode = 33
OptionBCMCSControllerIPv6AddressList OptionCode = 34
// skip 35
OptionGeoConfCivic OptionCode = 36
OptionRemoteID OptionCode = 37
OptionRelayAgentSubscriberID OptionCode = 38
OptionFQDN OptionCode = 39
OptionPANAAuthenticationAgent OptionCode = 40
OptionNewPOSIXTimezone OptionCode = 41
OptionNewTZDBTimezone OptionCode = 42
OptionEchoRequest OptionCode = 43
OptionLQQuery OptionCode = 44
OptionClientData OptionCode = 45
OptionCLTTime OptionCode = 46
OptionLQRelayData OptionCode = 47
OptionLQClientLink OptionCode = 48
OptionMIPv6HomeNetworkIDFQDN OptionCode = 49
OptionMIPv6VisitedHomeNetworkInformation OptionCode = 50
OptionLoSTServer OptionCode = 51
OptionCAPWAPAccessControllerAddresses OptionCode = 52
OptionRelayID OptionCode = 53
OptionIPv6AddressMOS OptionCode = 54
OptionIPv6FQDNMOS OptionCode = 55
OptionNTPServer OptionCode = 56
OptionV6AccessDomain OptionCode = 57
OptionSIPUACSList OptionCode = 58
OptionBootfileURL OptionCode = 59
OptionBootfileParam OptionCode = 60
OptionClientArchType OptionCode = 61
OptionNII OptionCode = 62
OptionGeolocation OptionCode = 63
OptionAFTRName OptionCode = 64
OptionERPLocalDomainName OptionCode = 65
OptionRSOO OptionCode = 66
OptionPDExclude OptionCode = 67
OptionVirtualSubnetSelection OptionCode = 68
OptionMIPv6IdentifiedHomeNetworkInformation OptionCode = 69
OptionMIPv6UnrestrictedHomeNetworkInformation OptionCode = 70
OptionMIPv6HomeNetworkPrefix OptionCode = 71
OptionMIPv6HomeAgentAddress OptionCode = 72
OptionMIPv6HomeAgentFQDN OptionCode = 73
)
// optionCodeToString maps DHCPv6 OptionCodes to human-readable strings.
var optionCodeToString = map[OptionCode]string{
OptionClientID: "OPTION_CLIENTID",
OptionServerID: "OPTION_SERVERID",
OptionIANA: "OPTION_IA_NA",
OptionIATA: "OPTION_IA_TA",
OptionIAAddr: "OPTION_IAADDR",
OptionORO: "OPTION_ORO",
OptionPreference: "OPTION_PREFERENCE",
OptionElapsedTime: "OPTION_ELAPSED_TIME",
OptionRelayMsg: "OPTION_RELAY_MSG",
OptionAuth: "OPTION_AUTH",
OptionUnicast: "OPTION_UNICAST",
OptionStatusCode: "OPTION_STATUS_CODE",
OptionRapidCommit: "OPTION_RAPID_COMMIT",
OptionUserClass: "OPTION_USER_CLASS",
OptionVendorClass: "OPTION_VENDOR_CLASS",
OptionVendorOpts: "OPTION_VENDOR_OPTS",
OptionInterfaceID: "OPTION_INTERFACE_ID",
OptionReconfMessage: "OPTION_RECONF_MSG",
OptionReconfAccept: "OPTION_RECONF_ACCEPT",
OptionSIPServersDomainNameList: "SIP Servers Domain Name List",
OptionSIPServersIPv6AddressList: "SIP Servers IPv6 Address List",
OptionDNSRecursiveNameServer: "DNS Recursive Name Server",
OptionDomainSearchList: "Domain Search List",
OptionIAPD: "OPTION_IA_PD",
OptionIAPrefix: "OPTION_IAPREFIX",
OptionNISServers: "OPTION_NIS_SERVERS",
OptionNISPServers: "OPTION_NISP_SERVERS",
OptionNISDomainName: "OPTION_NIS_DOMAIN_NAME",
OptionNISPDomainName: "OPTION_NISP_DOMAIN_NAME",
OptionSNTPServerList: "SNTP Server List",
OptionInformationRefreshTime: "Information Refresh Time",
OptionBCMCSControllerDomainNameList: "BCMCS Controller Domain Name List",
OptionBCMCSControllerIPv6AddressList: "BCMCS Controller IPv6 Address List",
OptionGeoConfCivic: "OPTION_GEOCONF",
OptionRemoteID: "OPTION_REMOTE_ID",
OptionRelayAgentSubscriberID: "Relay-Agent Subscriber ID",
OptionFQDN: "FQDN",
OptionPANAAuthenticationAgent: "PANA Authentication Agent",
OptionNewPOSIXTimezone: "OPTION_NEW_POSIX_TIME_ZONE",
OptionNewTZDBTimezone: "OPTION_NEW_TZDB_TIMEZONE",
OptionEchoRequest: "Echo Request",
OptionLQQuery: "OPTION_LQ_QUERY",
OptionClientData: "OPTION_CLIENT_DATA",
OptionCLTTime: "OPTION_CLT_TIME",
OptionLQRelayData: "OPTION_LQ_RELAY_DATA",
OptionLQClientLink: "OPTION_LQ_CLIENT_LINK",
OptionMIPv6HomeNetworkIDFQDN: "MIPv6 Home Network ID FQDN",
OptionMIPv6VisitedHomeNetworkInformation: "MIPv6 Visited Home Network Information",
OptionLoSTServer: "LoST Server",
OptionCAPWAPAccessControllerAddresses: "CAPWAP Access Controller Addresses",
OptionRelayID: "RELAY_ID",
OptionIPv6AddressMOS: "OPTION-IPv6_Address-MoS",
OptionIPv6FQDNMOS: "OPTION-IPv6-FQDN-MoS",
OptionNTPServer: "OPTION_NTP_SERVER",
OptionV6AccessDomain: "OPTION_V6_ACCESS_DOMAIN",
OptionSIPUACSList: "OPTION_SIP_UA_CS_LIST",
OptionBootfileURL: "OPT_BOOTFILE_URL",
OptionBootfileParam: "OPT_BOOTFILE_PARAM",
OptionClientArchType: "OPTION_CLIENT_ARCH_TYPE",
OptionNII: "OPTION_NII",
OptionGeolocation: "OPTION_GEOLOCATION",
OptionAFTRName: "OPTION_AFTR_NAME",
OptionERPLocalDomainName: "OPTION_ERP_LOCAL_DOMAIN_NAME",
OptionRSOO: "OPTION_RSOO",
OptionPDExclude: "OPTION_PD_EXCLUDE",
OptionVirtualSubnetSelection: "Virtual Subnet Selection",
OptionMIPv6IdentifiedHomeNetworkInformation: "MIPv6 Identified Home Network Information",
OptionMIPv6UnrestrictedHomeNetworkInformation: "MIPv6 Unrestricted Home Network Information",
OptionMIPv6HomeNetworkPrefix: "MIPv6 Home Network Prefix",
OptionMIPv6HomeAgentAddress: "MIPv6 Home Agent Address",
OptionMIPv6HomeAgentFQDN: "MIPv6 Home Agent FQDN",
}
|