diff options
Diffstat (limited to 'dhcpv6/dhcpv6.go')
-rw-r--r-- | dhcpv6/dhcpv6.go | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/dhcpv6/dhcpv6.go b/dhcpv6/dhcpv6.go index fe096a6..97eb401 100644 --- a/dhcpv6/dhcpv6.go +++ b/dhcpv6/dhcpv6.go @@ -8,6 +8,7 @@ type DHCPv6 interface { Type() MessageType ToBytes() []byte Summary() string + Length() int } func FromBytes(data []byte) (DHCPv6, error) { @@ -28,16 +29,22 @@ func FromBytes(data []byte) (DHCPv6, error) { return nil, fmt.Errorf("Invalid header size: shorter than %v bytes", headerSize) } if isRelay { + var ( + linkAddr, peerAddr []byte + ) d := DHCPv6Relay{ messageType: messageType, hopCount: uint8(data[1]), - linkAddr: append(data[2:18]), - peerAddr: append(data[18:34]), } + linkAddr = append(linkAddr, data[2:18]...) + d.linkAddr = linkAddr + peerAddr = append(peerAddr, data[18:34]...) + d.peerAddr = peerAddr options, err := OptionsFromBytes(data[34:]) if err != nil { return nil, err } + // TODO fail if no OptRelayMessage is present d.options = options return &d, nil } else { |