summaryrefslogtreecommitdiffhomepage
path: root/dhcpv4/bsdp
diff options
context:
space:
mode:
Diffstat (limited to 'dhcpv4/bsdp')
-rw-r--r--dhcpv4/bsdp/bsdp.go30
-rw-r--r--dhcpv4/bsdp/bsdp_test.go49
-rw-r--r--dhcpv4/bsdp/client.go2
3 files changed, 38 insertions, 43 deletions
diff --git a/dhcpv4/bsdp/bsdp.go b/dhcpv4/bsdp/bsdp.go
index 8d4430a..3f97602 100644
--- a/dhcpv4/bsdp/bsdp.go
+++ b/dhcpv4/bsdp/bsdp.go
@@ -143,12 +143,10 @@ func InformSelectForAck(ack dhcpv4.DHCPv4, replyPort uint16, selectedImage BootI
if needsReplyPort(replyPort) && replyPort >= 1024 {
return nil, errors.New("replyPort must be a privileged port")
}
- d.SetOpcode(dhcpv4.OpcodeBootRequest)
- d.SetHwType(ack.HwType())
- d.SetHwAddrLen(ack.HwAddrLen())
- clientHwAddr := ack.ClientHwAddr()
- d.SetClientHwAddr(clientHwAddr[:])
- d.SetTransactionID(ack.TransactionID())
+ d.OpCode = dhcpv4.OpcodeBootRequest
+ d.HWType = ack.HWType
+ d.ClientHWAddr = ack.ClientHWAddr
+ d.TransactionID = ack.TransactionID
if ack.IsBroadcast() {
d.SetBroadcast()
} else {
@@ -209,11 +207,10 @@ func NewReplyForInformList(inform *dhcpv4.DHCPv4, config ReplyConfig) (*dhcpv4.D
if err != nil {
return nil, err
}
- reply.SetClientIPAddr(inform.ClientIPAddr())
- reply.SetYourIPAddr(net.IPv4zero)
- reply.SetGatewayIPAddr(inform.GatewayIPAddr())
- reply.SetServerIPAddr(config.ServerIP)
- reply.SetServerHostName([]byte(config.ServerHostname))
+ reply.ClientIPAddr = inform.ClientIPAddr
+ reply.GatewayIPAddr = inform.GatewayIPAddr
+ reply.ServerIPAddr = config.ServerIP
+ reply.ServerHostName = config.ServerHostname
reply.AddOption(&dhcpv4.OptMessageType{MessageType: dhcpv4.MessageTypeAck})
reply.AddOption(&dhcpv4.OptServerIdentifier{ServerID: config.ServerIP})
@@ -249,12 +246,11 @@ func NewReplyForInformSelect(inform *dhcpv4.DHCPv4, config ReplyConfig) (*dhcpv4
return nil, err
}
- reply.SetClientIPAddr(inform.ClientIPAddr())
- reply.SetYourIPAddr(net.IPv4zero)
- reply.SetGatewayIPAddr(inform.GatewayIPAddr())
- reply.SetServerIPAddr(config.ServerIP)
- reply.SetServerHostName([]byte(config.ServerHostname))
- reply.SetBootFileName([]byte(config.BootFileName))
+ reply.ClientIPAddr = inform.ClientIPAddr
+ reply.GatewayIPAddr = inform.GatewayIPAddr
+ reply.ServerIPAddr = config.ServerIP
+ reply.ServerHostName = config.ServerHostname
+ reply.BootFileName = config.BootFileName
reply.AddOption(&dhcpv4.OptMessageType{MessageType: dhcpv4.MessageTypeAck})
reply.AddOption(&dhcpv4.OptServerIdentifier{ServerID: config.ServerIP})
diff --git a/dhcpv4/bsdp/bsdp_test.go b/dhcpv4/bsdp/bsdp_test.go
index 610b8d6..cb703da 100644
--- a/dhcpv4/bsdp/bsdp_test.go
+++ b/dhcpv4/bsdp/bsdp_test.go
@@ -103,20 +103,19 @@ func TestNewInformList_ReplyPort(t *testing.T) {
require.Equal(t, replyPort, opt.(*OptReplyPort).Port)
}
-func newAck(hwAddr []byte, transactionID uint32) *dhcpv4.DHCPv4 {
+func newAck(hwAddr net.HardwareAddr, transactionID [4]byte) *dhcpv4.DHCPv4 {
ack, _ := dhcpv4.New()
- ack.SetTransactionID(transactionID)
- ack.SetHwType(iana.HwTypeEthernet)
- ack.SetClientHwAddr(hwAddr)
- ack.SetHwAddrLen(uint8(len(hwAddr)))
+ ack.TransactionID = transactionID
+ ack.HWType = iana.HwTypeEthernet
+ ack.ClientHWAddr = hwAddr
ack.AddOption(&dhcpv4.OptMessageType{MessageType: dhcpv4.MessageTypeAck})
ack.AddOption(&dhcpv4.OptionGeneric{OptionCode: dhcpv4.OptionEnd})
return ack
}
func TestInformSelectForAck_Broadcast(t *testing.T) {
- hwAddr := []byte{0x11, 0x22, 0x33, 0x44, 0x55, 0x66}
- tid := uint32(22)
+ hwAddr := net.HardwareAddr{0x11, 0x22, 0x33, 0x44, 0x55, 0x66}
+ tid := [4]byte{0x22, 0, 0, 0}
serverID := net.IPv4(1, 2, 3, 4)
bootImage := BootImage{
ID: BootImageID{
@@ -132,10 +131,10 @@ func TestInformSelectForAck_Broadcast(t *testing.T) {
m, err := InformSelectForAck(*ack, 0, bootImage)
require.NoError(t, err)
- require.Equal(t, dhcpv4.OpcodeBootRequest, m.Opcode())
- require.Equal(t, ack.HwType(), m.HwType())
- require.Equal(t, ack.ClientHwAddr(), m.ClientHwAddr())
- require.Equal(t, ack.TransactionID(), m.TransactionID())
+ require.Equal(t, dhcpv4.OpcodeBootRequest, m.OpCode)
+ require.Equal(t, ack.HWType, m.HWType)
+ require.Equal(t, ack.ClientHWAddr, m.ClientHWAddr)
+ require.Equal(t, ack.TransactionID, m.TransactionID)
require.True(t, m.IsBroadcast())
// Validate options.
@@ -157,8 +156,8 @@ func TestInformSelectForAck_Broadcast(t *testing.T) {
}
func TestInformSelectForAck_NoServerID(t *testing.T) {
- hwAddr := []byte{0x11, 0x22, 0x33, 0x44, 0x55, 0x66}
- tid := uint32(22)
+ hwAddr := net.HardwareAddr{0x11, 0x22, 0x33, 0x44, 0x55, 0x66}
+ tid := [4]byte{0x22, 0, 0, 0}
bootImage := BootImage{
ID: BootImageID{
IsInstall: true,
@@ -174,8 +173,8 @@ func TestInformSelectForAck_NoServerID(t *testing.T) {
}
func TestInformSelectForAck_BadReplyPort(t *testing.T) {
- hwAddr := []byte{0x11, 0x22, 0x33, 0x44, 0x55, 0x66}
- tid := uint32(22)
+ hwAddr := net.HardwareAddr{0x11, 0x22, 0x33, 0x44, 0x55, 0x66}
+ tid := [4]byte{0x22, 0, 0, 0}
serverID := net.IPv4(1, 2, 3, 4)
bootImage := BootImage{
ID: BootImageID{
@@ -194,8 +193,8 @@ func TestInformSelectForAck_BadReplyPort(t *testing.T) {
}
func TestInformSelectForAck_ReplyPort(t *testing.T) {
- hwAddr := []byte{0x11, 0x22, 0x33, 0x44, 0x55, 0x66}
- tid := uint32(22)
+ hwAddr := net.HardwareAddr{0x11, 0x22, 0x33, 0x44, 0x55, 0x66}
+ tid := [4]byte{0x22, 0, 0, 0}
serverID := net.IPv4(1, 2, 3, 4)
bootImage := BootImage{
ID: BootImageID{
@@ -272,9 +271,9 @@ func TestNewReplyForInformList(t *testing.T) {
}
ack, err := NewReplyForInformList(inform, config)
require.NoError(t, err)
- require.Equal(t, net.IP{1, 2, 3, 4}, ack.ClientIPAddr())
- require.Equal(t, net.IPv4zero, ack.YourIPAddr())
- require.Equal(t, "bsdp.foo.com", ack.ServerHostName())
+ require.Equal(t, net.IP{1, 2, 3, 4}, ack.ClientIPAddr)
+ require.Equal(t, net.IPv4zero, ack.YourIPAddr)
+ require.Equal(t, "bsdp.foo.com", ack.ServerHostName)
// Validate options.
RequireHasOption(t, ack, &dhcpv4.OptMessageType{MessageType: dhcpv4.MessageTypeAck})
@@ -283,7 +282,7 @@ func TestNewReplyForInformList(t *testing.T) {
require.NotNil(t, ack.GetOneOption(dhcpv4.OptionVendorSpecificInformation))
// Ensure options terminated with End option.
- require.Equal(t, &dhcpv4.OptionGeneric{OptionCode: dhcpv4.OptionEnd}, ack.Options()[len(ack.Options())-1])
+ require.Equal(t, &dhcpv4.OptionGeneric{OptionCode: dhcpv4.OptionEnd}, ack.Options[len(ack.Options)-1])
// Vendor-specific options.
vendorOpts := ack.GetOneOption(dhcpv4.OptionVendorSpecificInformation).(*OptVendorSpecificInformation)
@@ -353,9 +352,9 @@ func TestNewReplyForInformSelect(t *testing.T) {
}
ack, err := NewReplyForInformSelect(inform, config)
require.NoError(t, err)
- require.Equal(t, net.IP{1, 2, 3, 4}, ack.ClientIPAddr())
- require.Equal(t, net.IPv4zero, ack.YourIPAddr())
- require.Equal(t, "bsdp.foo.com", ack.ServerHostName())
+ require.Equal(t, net.IP{1, 2, 3, 4}, ack.ClientIPAddr)
+ require.Equal(t, net.IPv4zero, ack.YourIPAddr)
+ require.Equal(t, "bsdp.foo.com", ack.ServerHostName)
// Validate options.
RequireHasOption(t, ack, &dhcpv4.OptMessageType{MessageType: dhcpv4.MessageTypeAck})
@@ -365,7 +364,7 @@ func TestNewReplyForInformSelect(t *testing.T) {
require.NotNil(t, ack.GetOneOption(dhcpv4.OptionVendorSpecificInformation))
// Ensure options are terminated with End option.
- require.Equal(t, &dhcpv4.OptionGeneric{OptionCode: dhcpv4.OptionEnd}, ack.Options()[len(ack.Options())-1])
+ require.Equal(t, &dhcpv4.OptionGeneric{OptionCode: dhcpv4.OptionEnd}, ack.Options[len(ack.Options)-1])
vendorOpts := ack.GetOneOption(dhcpv4.OptionVendorSpecificInformation).(*OptVendorSpecificInformation)
RequireHasOption(t, vendorOpts, &OptMessageType{Type: MessageTypeSelect})
diff --git a/dhcpv4/bsdp/client.go b/dhcpv4/bsdp/client.go
index dd9cbcd..dd4a0a0 100644
--- a/dhcpv4/bsdp/client.go
+++ b/dhcpv4/bsdp/client.go
@@ -19,7 +19,7 @@ func NewClient() *Client {
}
func castVendorOpt(ack *dhcpv4.DHCPv4) {
- opts := ack.Options()
+ opts := ack.Options
for i := 0; i < len(opts); i++ {
if opts[i].Code() == dhcpv4.OptionVendorSpecificInformation {
vendorOpt, err := ParseOptVendorSpecificInformation(opts[i].ToBytes())