Documentation ¶
Overview ¶
Package dhcp6 implements a DHCPv6 server, as described in RFC 3315.
Unless otherwise stated, any reference to "DHCP" in this package refers to DHCPv6 only.
Index ¶
- Variables
- type MessageType
- type OptionCode
- type Options
- func (o Options) Add(key OptionCode, value encoding.BinaryMarshaler) error
- func (o Options) AddRaw(key OptionCode, value []byte)
- func (o Options) Get(key OptionCode) ([][]byte, error)
- func (o Options) GetOne(key OptionCode) ([]byte, error)
- func (o Options) MarshalBinary() ([]byte, error)
- func (o *Options) UnmarshalBinary(p []byte) error
- type Packet
- type Status
- Bugs
Constants ¶
This section is empty.
Variables ¶
var ( // ErrInvalidOptions is returned when invalid options data is encountered // during parsing. The data could report an incorrect length or have // trailing bytes which are not part of the option. ErrInvalidOptions = errors.New("invalid options data") // ErrInvalidPacket is returned when a byte slice does not contain enough // data to create a valid Packet. A Packet must have at least a message type // and transaction ID. ErrInvalidPacket = errors.New("not enough bytes for valid packet") // ErrOptionNotPresent is returned when a requested opcode is not in // the packet. ErrOptionNotPresent = errors.New("option code not present in packet") )
Functions ¶
This section is empty.
Types ¶
type MessageType ¶
type MessageType uint8
MessageType represents a DHCP message type, as defined in RFC 3315, Section 5.3. Different DHCP message types are used to perform different actions between a client and server.
const ( // RFC 3315 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 MessageTypeRelayForw MessageType = 12 MessageTypeRelayRepl MessageType = 13 // RFC 5007 MessageTypeLeasequery MessageType = 14 MessageTypeLeasequeryReply MessageType = 15 // RFC 5460 MessageTypeLeasequeryDone MessageType = 16 MessageTypeLeasequeryData MessageType = 17 // RFC 6977 MessageTypeReconfigureRequest MessageType = 18 MessageTypeReconfigureReply MessageType = 19 // RFC 7341 MessageTypeDHCPv4Query MessageType = 20 MessageTypeDHCPv4Response MessageType = 21 )
MessageType constants which indicate the message types described in RFCs 3315, 5007, 5460, 6977, and 7341.
These message types are taken from IANA's DHCPv6 parameters registry: http://www.iana.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xhtml.
func (MessageType) String ¶
func (i MessageType) String() string
type OptionCode ¶
type OptionCode uint16
OptionCode represents a DHCP option, as defined in RFC 3315, Section 22. Options are used to carry additional information and parameters in DHCP messages between client and server.
const ( // RFC 3315 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 OptionAuth OptionCode = 11 OptionUnicast OptionCode = 12 OptionStatusCode OptionCode = 13 OptionRapidCommit OptionCode = 14 OptionUserClass OptionCode = 15 OptionVendorClass OptionCode = 16 OptionVendorOpts OptionCode = 17 OptionInterfaceID OptionCode = 18 OptionReconfMsg OptionCode = 19 OptionReconfAccept OptionCode = 20 // RFC 3646 OptionDNSServers OptionCode = 23 // RFC 3633 OptionIAPD OptionCode = 25 OptionIAPrefix OptionCode = 26 // RFC 4649 OptionRemoteIdentifier OptionCode = 37 // RFC 5970 OptionBootFileURL OptionCode = 59 OptionBootFileParam OptionCode = 60 OptionClientArchType OptionCode = 61 OptionNII OptionCode = 62 )
OptionCode constants which indicate the option codes described in RFC 3315, RFC 3633, and RFC 5970.
These option codes are taken from IANA's DHCPv6 parameters registry: http://www.iana.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xhtml.
func (OptionCode) String ¶
func (i OptionCode) String() string
type Options ¶
type Options map[OptionCode][][]byte
Options is a map of OptionCode keys with a slice of byte slice values.
Its methods can be used to easily check for additional information from a packet. Get and GetOne should be used to access data from Options.
func (Options) Add ¶
func (o Options) Add(key OptionCode, value encoding.BinaryMarshaler) error
Add adds a new OptionCode key and BinaryMarshaler struct's bytes to the Options map.
func (Options) AddRaw ¶
func (o Options) AddRaw(key OptionCode, value []byte)
AddRaw adds a new OptionCode key and raw value byte slice to the Options map.
func (Options) Get ¶
func (o Options) Get(key OptionCode) ([][]byte, error)
Get attempts to retrieve all values specified by an OptionCode key.
If a value is found, get returns a non-nil [][]byte and nil. If it is not found, Get returns nil and ErrOptionNotPresent.
func (Options) GetOne ¶
func (o Options) GetOne(key OptionCode) ([]byte, error)
GetOne attempts to retrieve the first and only value specified by an OptionCode key. GetOne should only be used for OptionCode keys that must have at most one value.
GetOne works just like Get, but if there is more than one value for the OptionCode key, ErrInvalidPacket will be returned.
func (Options) MarshalBinary ¶
MarshalBinary allocates a buffer and writes options in their DHCPv6 binary format into the buffer.
func (*Options) UnmarshalBinary ¶
UnmarshalBinary fills opts with option codes and corresponding values from an input byte slice.
It is used with various different types to enable parsing of both top-level options, and options embedded within other options. If options data is malformed, it returns ErrInvalidOptions.
type Packet ¶
type Packet struct { // MessageType specifies the DHCP message type constant, such as // MessageTypeSolicit, MessageTypeAdvertise, etc. MessageType MessageType // TransactionID specifies the DHCP transaction ID. The transaction ID must // be the same for all message exchanges in one DHCP transaction. TransactionID [3]byte // Options specifies a map of DHCP options. Its methods can be used to // retrieve data from an incoming packet, or send data with an outgoing // packet. Options Options }
Packet represents a raw DHCPv6 packet, using the format described in RFC 3315, Section 6.
The Packet type is typically only needed for low-level operations within the client, server, or in tests.
func (*Packet) MarshalBinary ¶
MarshalBinary allocates a byte slice containing the data from a Packet.
func (*Packet) UnmarshalBinary ¶
UnmarshalBinary unmarshals a raw byte slice into a Packet.
If the byte slice does not contain enough data to form a valid Packet, ErrInvalidPacket is returned.
type Status ¶
type Status uint16
Status represesents a DHCP status code, as defined in RFC 3315, Section 5.4. Status codes are used to communicate success or failure between client and server.
const ( // RFC 3315 StatusSuccess Status = 0 StatusUnspecFail Status = 1 StatusNoAddrsAvail Status = 2 StatusNoBinding Status = 3 StatusNotOnLink Status = 4 StatusUseMulticast Status = 5 // RFC 3633 StatusNoPrefixAvail Status = 6 // RFC 5007 StatusUnknownQueryType Status = 7 StatusMalformedQuery Status = 8 StatusNotConfigured Status = 9 StatusNotAllowed Status = 10 // RFC 5460 StatusQueryTerminated Status = 11 )
Status constants which indicate the status codes described in RFCs 3315, 3633, 5007, and 5460.
These status codes are taken from IANA's DHCPv6 parameters registry: http://www.iana.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xhtml.
Notes ¶
Bugs ¶
add additional option code types defined by IANA