diff options
Diffstat (limited to 'dhcpv6/modifiers.go')
-rw-r--r-- | dhcpv6/modifiers.go | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/dhcpv6/modifiers.go b/dhcpv6/modifiers.go index cbd2231..d0d3268 100644 --- a/dhcpv6/modifiers.go +++ b/dhcpv6/modifiers.go @@ -2,8 +2,10 @@ package dhcpv6 import ( "log" + "net" "github.com/insomniacslk/dhcp/iana" + "github.com/insomniacslk/dhcp/rfc1035label" ) // WithClientID adds a client ID option to a DHCPv6 packet @@ -63,6 +65,54 @@ func WithArchType(at iana.ArchType) Modifier { } } +// WithIANA adds or updates an OptIANA option with the provided IAAddress +// options +func WithIANA(addrs ...OptIAAddress) Modifier { + return func(d DHCPv6) DHCPv6 { + opt := d.GetOneOption(OptionIANA) + if opt == nil { + opt = &OptIANA{} + } + iaNa := opt.(*OptIANA) + for _, addr := range addrs { + iaNa.AddOption(&addr) + } + d.UpdateOption(iaNa) + return d + } +} + +// WithDNS adds or updates an OptDNSRecursiveNameServer +func WithDNS(dnses ...net.IP) Modifier { + return func(d DHCPv6) DHCPv6 { + opt := d.GetOneOption(OptionDNSRecursiveNameServer) + if opt == nil { + opt = &OptDNSRecursiveNameServer{} + } + odns := opt.(*OptDNSRecursiveNameServer) + odns.NameServers = append(odns.NameServers, dnses[:]...) + d.UpdateOption(odns) + return d + } +} + +// WithDomainSearchList adds or updates an OptDomainSearchList +func WithDomainSearchList(searchlist ...string) Modifier { + return func(d DHCPv6) DHCPv6 { + opt := d.GetOneOption(OptionDomainSearchList) + if opt == nil { + opt = &OptDomainSearchList{} + } + osl := opt.(*OptDomainSearchList) + labels := rfc1035label.Labels{ + Labels: searchlist, + } + osl.DomainSearchList = &labels + d.UpdateOption(osl) + return d + } +} + // WithRequestedOptions adds requested options to the packet func WithRequestedOptions(optionCodes ...OptionCode) Modifier { return func(d DHCPv6) DHCPv6 { |