func (c *client) isCompletePacket(p *dhcp.Packet) bool { complete := !ip.IsUnspecifiedIP(p.YourIP()) && !ip.IsUnspecifiedIP(p.ServerIP()) if !complete { return false } for _, param := range c.params { switch dhcp4.OptionCode(param) { case dhcp4.OptionSubnetMask: ones, bits := p.SubnetMask().Size() if ones == 0 || bits == 0 { return false } case dhcp4.OptionRouter: if ip.IsUnspecifiedIP(p.Gateway()) { return false } case dhcp4.OptionDomainNameServer: if len(p.DNS()) == 0 { return false } } } if p.LeaseTime().Seconds() == 0 { return false } return true }
func (c *client) newClient(ack *dhcp.Packet) (*dhcp4client.Client, error) { conn, err := dhcp4client.NewInetSock(dhcp4client.SetRemoteAddr(net.UDPAddr{IP: ack.ServerIP(), Port: 67})) if err != nil { return nil, err } cl, err := dhcp4client.New(dhcp4client.Connection(conn), dhcp4client.Timeout(c.timeout)) if err != nil { return nil, err } return cl, nil }
func isCompletePacket(p *dhcp.Packet) bool { complete := !ip.IsUnspecifiedIP(p.Gateway()) && !ip.IsUnspecifiedIP(p.YourIP()) && !ip.IsUnspecifiedIP(p.ServerIP()) if !complete { return false } ones, bits := p.SubnetMask().Size() if ones == 0 || bits == 0 { return false } if p.LeaseTime().Seconds() == 0 { return false } return true }