From 9bb7354278c1ab7d4ec1addf82ddb236a8857798 Mon Sep 17 00:00:00 2001 From: Anatole Denis Date: Sat, 24 Apr 2021 18:11:36 +0200 Subject: dhcpv6: Implement RelayPort option This is a simple 1-value option used in relay messages for RFC8357, specifying the UDP port on which messages should be sent to the relay Signed-off-by: Anatole Denis --- dhcpv6/option_relayport.go | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 dhcpv6/option_relayport.go (limited to 'dhcpv6/option_relayport.go') diff --git a/dhcpv6/option_relayport.go b/dhcpv6/option_relayport.go new file mode 100644 index 0000000..fd51948 --- /dev/null +++ b/dhcpv6/option_relayport.go @@ -0,0 +1,42 @@ +// This module defines the optRelayPort structure. +// https://www.ietf.org/rfc/rfc8357.txt + +package dhcpv6 + +import ( + "fmt" + + "github.com/u-root/uio/uio" +) + +// OptRelayPort specifies an UDP port to use for the downstream relay +func OptRelayPort(port uint16) Option { + return &optRelayPort{DownstreamSourcePort: port} +} + +type optRelayPort struct { + DownstreamSourcePort uint16 +} + +func (op *optRelayPort) Code() OptionCode { + return OptionRelayPort +} + +func (op *optRelayPort) ToBytes() []byte { + buf := uio.NewBigEndianBuffer(nil) + buf.Write16(op.DownstreamSourcePort) + return buf.Data() +} + +func (op *optRelayPort) String() string { + return fmt.Sprintf("RelayPort: %d", op.DownstreamSourcePort) +} + +// build an optRelayPort structure from a sequence of bytes. +// The input data does not include option code and length bytes. +func parseOptRelayPort(data []byte) (*optRelayPort, error) { + var opt optRelayPort + buf := uio.NewBigEndianBuffer(data) + opt.DownstreamSourcePort = buf.Read16() + return &opt, buf.FinError() +} -- cgit v1.2.3