summaryrefslogtreecommitdiffhomepage
path: root/dhcpv6/option_fqdn.go
diff options
context:
space:
mode:
Diffstat (limited to 'dhcpv6/option_fqdn.go')
-rw-r--r--dhcpv6/option_fqdn.go41
1 files changed, 41 insertions, 0 deletions
diff --git a/dhcpv6/option_fqdn.go b/dhcpv6/option_fqdn.go
new file mode 100644
index 0000000..82d1254
--- /dev/null
+++ b/dhcpv6/option_fqdn.go
@@ -0,0 +1,41 @@
+package dhcpv6
+
+import (
+ "fmt"
+
+ "github.com/u-root/u-root/pkg/uio"
+)
+
+// OptFQDN implements OptionFQDN option.
+//
+// https://tools.ietf.org/html/rfc4704
+type OptFQDN struct {
+ Flags uint8
+ DomainName string
+}
+
+// Code returns the option code.
+func (op *OptFQDN) Code() OptionCode {
+ return OptionFQDN
+}
+
+// ToBytes serializes the option and returns it as a sequence of bytes
+func (op *OptFQDN) ToBytes() []byte {
+ buf := uio.NewBigEndianBuffer(nil)
+ buf.Write8(op.Flags)
+ buf.WriteBytes([]byte(op.DomainName))
+ return buf.Data()
+}
+
+func (op *OptFQDN) String() string {
+ return fmt.Sprintf("OptFQDN{flags=%d, domainname=%s}", op.Flags, op.DomainName)
+}
+
+// ParseOptFQDN deserializes from bytes to build a OptFQDN structure.
+func ParseOptFQDN(data []byte) (*OptFQDN, error) {
+ var opt OptFQDN
+ buf := uio.NewBigEndianBuffer(data)
+ opt.Flags = buf.Read8()
+ opt.DomainName = string(buf.ReadAll())
+ return &opt, buf.FinError()
+}