fix: default route not set

This commit is contained in:
Siyuan 2025-10-07 12:58:47 +00:00
parent 49e28f218e
commit df0f5efff3
2 changed files with 33 additions and 15 deletions

View File

@ -628,6 +628,8 @@ func (im *InterfaceManager) convertDHCPLeaseToIPv4Config(lease *types.DHCPLease)
Permanent: false, Permanent: false,
} }
im.logger.Trace().Interface("ipv4Addr", ipv4Addr).Msg("converted DHCP lease to IPv4Config")
// Create IPv4Config // Create IPv4Config
return &ipv4Addr return &ipv4Addr
} }

View File

@ -336,7 +336,13 @@ func (nm *NetlinkManager) RemoveDefaultRoute(family int) error {
} }
func (nm *NetlinkManager) ReconcileLinkAddrs(link *Link, expected []*types.IPAddress) error { func (nm *NetlinkManager) ReconcileLinkAddrs(link *Link, expected []*types.IPAddress) error {
existingAddr := make(map[string]bool) expectedAddrs := make(map[string]bool)
existingAddrs := make(map[string]bool)
for _, addr := range expected {
ipCidr := addr.Address.IP.String() + "/" + addr.Address.Mask.String()
expectedAddrs[ipCidr] = true
}
addrs, err := nm.AddrList(link, AfUnspec) addrs, err := nm.AddrList(link, AfUnspec)
if err != nil { if err != nil {
@ -345,26 +351,36 @@ func (nm *NetlinkManager) ReconcileLinkAddrs(link *Link, expected []*types.IPAdd
for _, addr := range addrs { for _, addr := range addrs {
ipCidr := addr.IP.String() + "/" + addr.IPNet.Mask.String() ipCidr := addr.IP.String() + "/" + addr.IPNet.Mask.String()
existingAddr[ipCidr] = true existingAddrs[ipCidr] = true
} }
for _, addr := range expected { for _, addr := range expected {
family := AfUnspec
if addr.Address.IP.To4() != nil {
family = AfInet
} else if addr.Address.IP.To16() != nil {
family = AfInet6
}
ipCidr := addr.Address.IP.String() + "/" + addr.Address.Mask.String() ipCidr := addr.Address.IP.String() + "/" + addr.Address.Mask.String()
if ok := existingAddr[ipCidr]; ok { if ok := existingAddrs[ipCidr]; !ok {
continue ipNet := &net.IPNet{
IP: addr.Address.IP,
Mask: addr.Address.Mask,
}
if err := nm.AddrAdd(link, &netlink.Addr{IPNet: ipNet}); err != nil {
return fmt.Errorf("failed to add address %s: %w", ipCidr, err)
}
nm.logger.Info().Str("address", ipCidr).Msg("added address")
} }
ipNet := &net.IPNet{ if addr.Gateway != nil {
IP: addr.Address.IP, nm.logger.Trace().Str("address", ipCidr).Str("gateway", addr.Gateway.String()).Msg("adding default route for address")
Mask: addr.Address.Mask, if err := nm.AddDefaultRoute(link, addr.Gateway, family); err != nil {
} return fmt.Errorf("failed to add default route for address %s: %w", ipCidr, err)
}
addr := &netlink.Addr{
IPNet: ipNet,
}
if err := nm.AddrAdd(link, addr); err != nil {
return fmt.Errorf("failed to add address %s: %w", ipCidr, err)
} }
} }