blob: 54285cd792fca101192f87e8c9d33276ac71f201 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
package dhcpv6
import (
"log"
)
// WithClientID adds a client ID option to a DHCPv6 packet
func WithClientID(duid Duid) Modifier {
return func(d DHCPv6) DHCPv6 {
cid := OptClientId{Cid: duid}
d.UpdateOption(&cid)
return d
}
}
// WithServerID adds a client ID option to a DHCPv6 packet
func WithServerID(duid Duid) Modifier {
return func(d DHCPv6) DHCPv6 {
sid := OptServerId{Sid: duid}
d.UpdateOption(&sid)
return d
}
}
// WithNetboot adds bootfile URL and bootfile param options to a DHCPv6 packet.
func WithNetboot(d DHCPv6) DHCPv6 {
msg, ok := d.(*DHCPv6Message)
if !ok {
log.Printf("WithNetboot: not a DHCPv6Message")
return d
}
// add OPT_BOOTFILE_URL and OPT_BOOTFILE_PARAM
opt := msg.GetOneOption(OPTION_ORO)
if opt == nil {
opt = &OptRequestedOption{}
}
// TODO only add options if they are not there already
oro := opt.(*OptRequestedOption)
oro.AddRequestedOption(OPT_BOOTFILE_URL)
oro.AddRequestedOption(OPT_BOOTFILE_PARAM)
msg.UpdateOption(oro)
return d
}
// WithUserClass adds a user class option to the packet
func WithUserClass(uc []byte) Modifier {
// TODO let the user specify multiple user classes
return func(d DHCPv6) DHCPv6 {
ouc := OptUserClass{UserClasses: [][]byte{uc}}
d.AddOption(&ouc)
return d
}
}
// WithArchType adds an arch type option to the packet
func WithArchType(at ArchType) Modifier {
return func(d DHCPv6) DHCPv6 {
ao := OptClientArchType{ArchType: at}
d.AddOption(&ao)
return d
}
}
|