dhcp subnet prefix fix

This commit is contained in:
soypat
2025-08-20 19:25:08 -03:00
parent 7470324b49
commit d254f3ae80
5 changed files with 39 additions and 3 deletions
+16
View File
@@ -20,6 +20,7 @@ type Client struct {
clientID []byte
hostname []byte
dns []netip.Addr
ntps []netip.Addr
svIPtos ipv4.ToS
tRenew uint32
@@ -290,6 +291,13 @@ func (c *Client) setOptions(frm Frame) error {
for i := 0; i < len(data); i += 4 {
c.dns = append(c.dns, netip.AddrFrom4([4]byte(data[i:i+4])))
}
case OptNTPServersAddresses:
if len(c.ntps) > 0 || len(data)%4 != 0 {
return nil
}
for i := 0; i < len(data); i += 4 {
c.ntps = append(c.ntps, netip.AddrFrom4([4]byte(data[i:i+4])))
}
}
return nil
})
@@ -355,6 +363,14 @@ func (d *Client) DNSServerFirst() netip.Addr {
return d.dns[0]
}
func (d *Client) SubnetPrefix() netip.Prefix {
if !d.offer.valid {
return netip.Prefix{}
}
m, _ := netip.AddrFrom4(d.offer.addr).Prefix(int(d.SubnetCIDRBits()))
return m
}
func (d *Client) SubnetCIDRBits() uint8 {
if !d.subnet.valid {
return 0
+9
View File
@@ -0,0 +1,9 @@
//go:build !tinygo
package internal
import "net"
func interfaceByName(name string) (*net.Interface, error) {
return net.InterfaceByName(name)
}
+12
View File
@@ -0,0 +1,12 @@
//go:build tinygo
package internal
import (
"errors"
"net"
)
func interfaceByName(name string) (*net.Interface, error) {
return nil, errors.New("net.InterfaceByName not implemented on TinyGo")
}
+1 -2
View File
@@ -7,7 +7,6 @@ import (
"errors"
"fmt"
"math/bits"
"net"
"net/netip"
"os"
"os/exec"
@@ -205,7 +204,7 @@ type Bridge struct {
}
func NewBridge(name string) (*Bridge, error) {
iface, err := net.InterfaceByName(name)
iface, err := interfaceByName(name)
if err != nil {
return nil, err
}
+1 -1
View File
@@ -480,7 +480,7 @@ func (s *StackAsync) populateDHCPResults() error {
router := netip.AddrFrom4(router4)
s.dhcpResults = DHCPResults{
Router: router,
Subnet: netip.PrefixFrom(router, int(s.dhcp.SubnetCIDRBits())),
Subnet: s.dhcp.SubnetPrefix(),
AssignedAddr: netip.AddrFrom4(assigned4),
ServerAddr: addr4(s.dhcp.ServerAddr()),
BroadcastAddr: addr4(s.dhcp.BroadcastAddr()),