mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Remove duplicate SetSockOpt call
Clean up some error handling, and add TODO explaining incorrect behaviour with respect to broadcast on interfaces lacking an IP address. PiperOrigin-RevId: 236756233 Change-Id: I9662e7dc062c90565a32a3e153c4dbc98c55b522
This commit is contained in:
committed by
Shentubot
parent
0d683c9961
commit
dcb634ce73
+9
-8
@@ -120,33 +120,34 @@ func (c *Client) Config() Config {
|
||||
// If the server sets a lease limit a timer is set to automatically
|
||||
// renew it.
|
||||
func (c *Client) Request(ctx context.Context, requestedAddr tcpip.Address) (cfg Config, reterr error) {
|
||||
// TODO: remove calls to {Add,Remove}Address when they're no
|
||||
// longer required to send and receive broadcast.
|
||||
if err := c.stack.AddAddressWithOptions(c.nicid, ipv4.ProtocolNumber, tcpipHeader.IPv4Any, stack.NeverPrimaryEndpoint); err != nil && err != tcpip.ErrDuplicateAddress {
|
||||
return Config{}, fmt.Errorf("dhcp: %v", err)
|
||||
return Config{}, fmt.Errorf("dhcp: AddAddressWithOptions(): %s", err)
|
||||
}
|
||||
defer c.stack.RemoveAddress(c.nicid, tcpipHeader.IPv4Any)
|
||||
|
||||
var wq waiter.Queue
|
||||
ep, err := c.stack.NewEndpoint(udp.ProtocolNumber, ipv4.ProtocolNumber, &wq)
|
||||
if err != nil {
|
||||
return Config{}, fmt.Errorf("dhcp: outbound endpoint: %v", err)
|
||||
return Config{}, fmt.Errorf("dhcp: NewEndpoint(): %s", err)
|
||||
}
|
||||
defer ep.Close()
|
||||
if err := ep.SetSockOpt(tcpip.BroadcastOption(1)); err != nil {
|
||||
return Config{}, fmt.Errorf("dhcp: setsockopt: %v", err)
|
||||
return Config{}, fmt.Errorf("dhcp: SetSockOpt(BroadcastOption): %s", err)
|
||||
}
|
||||
if err := ep.Bind(tcpip.FullAddress{
|
||||
Addr: tcpipHeader.IPv4Any,
|
||||
Port: ClientPort,
|
||||
NIC: c.nicid,
|
||||
}, nil); err != nil {
|
||||
return Config{}, fmt.Errorf("dhcp: bind failed: %v", err)
|
||||
}
|
||||
if err := ep.SetSockOpt(tcpip.BroadcastOption(1)); err != nil {
|
||||
return Config{}, fmt.Errorf("dhcp: setsockopt SO_BROADCAST: %v", err)
|
||||
return Config{}, fmt.Errorf("dhcp: Bind(): %s", err)
|
||||
}
|
||||
|
||||
var xid [4]byte
|
||||
rand.Read(xid[:])
|
||||
if _, err := rand.Read(xid[:]); err != nil {
|
||||
return Config{}, fmt.Errorf("dhcp: rand.Read(): %s", err)
|
||||
}
|
||||
|
||||
// DHCPDISCOVERY
|
||||
discOpts := options{
|
||||
|
||||
Reference in New Issue
Block a user