mirror of https://github.com/jetkvm/kvm.git
fix netmask calculation
This commit is contained in:
parent
3c83bcfe69
commit
78f0479b6b
|
|
@ -163,6 +163,14 @@ func (im *InterfaceManager) GetIPv4Addresses() []string {
|
||||||
return im.state.IPv4Addresses
|
return im.state.IPv4Addresses
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (im *InterfaceManager) GetIPv4Address() string {
|
||||||
|
return im.state.IPv4Address
|
||||||
|
}
|
||||||
|
|
||||||
|
func (im *InterfaceManager) GetIPv6Address() string {
|
||||||
|
return im.state.IPv6Address
|
||||||
|
}
|
||||||
|
|
||||||
func (im *InterfaceManager) GetIPv6Addresses() []string {
|
func (im *InterfaceManager) GetIPv6Addresses() []string {
|
||||||
addresses := []string{}
|
addresses := []string{}
|
||||||
for _, addr := range im.state.IPv6Addresses {
|
for _, addr := range im.state.IPv6Addresses {
|
||||||
|
|
@ -585,7 +593,7 @@ func (im *InterfaceManager) updateInterfaceState() error {
|
||||||
im.logger.Error().Err(err).Msg("failed to update IP addresses")
|
im.logger.Error().Err(err).Msg("failed to update IP addresses")
|
||||||
}
|
}
|
||||||
|
|
||||||
// im.state.LastUpdated = time.Now() // TODO: remove this
|
im.state.LastUpdated = time.Now()
|
||||||
|
|
||||||
// Notify callback if state changed
|
// Notify callback if state changed
|
||||||
if stateChanged && im.onStateChange != nil {
|
if stateChanged && im.onStateChange != nil {
|
||||||
|
|
@ -604,10 +612,13 @@ func (im *InterfaceManager) updateIPAddresses(nl *link.Link) error {
|
||||||
return fmt.Errorf("failed to get addresses: %w", err)
|
return fmt.Errorf("failed to get addresses: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var ipv4Addresses []string
|
var (
|
||||||
var ipv6Addresses []types.IPv6Address
|
ipv4Addresses []string
|
||||||
var ipv4Addr, ipv6Addr string
|
ipv6Addresses []types.IPv6Address
|
||||||
var ipv6LinkLocal string
|
ipv4Addr, ipv6Addr string
|
||||||
|
ipv6LinkLocal string
|
||||||
|
ipv4Ready, ipv6Ready = false, false
|
||||||
|
)
|
||||||
|
|
||||||
for _, addr := range addrs {
|
for _, addr := range addrs {
|
||||||
im.logger.Debug().Str("address", addr.IP.String()).Msg("checking address")
|
im.logger.Debug().Str("address", addr.IP.String()).Msg("checking address")
|
||||||
|
|
@ -616,6 +627,7 @@ func (im *InterfaceManager) updateIPAddresses(nl *link.Link) error {
|
||||||
ipv4Addresses = append(ipv4Addresses, addr.IPNet.String())
|
ipv4Addresses = append(ipv4Addresses, addr.IPNet.String())
|
||||||
if ipv4Addr == "" {
|
if ipv4Addr == "" {
|
||||||
ipv4Addr = addr.IP.String()
|
ipv4Addr = addr.IP.String()
|
||||||
|
ipv4Ready = true
|
||||||
}
|
}
|
||||||
} else if addr.IP.To16() != nil {
|
} else if addr.IP.To16() != nil {
|
||||||
// IPv6 address
|
// IPv6 address
|
||||||
|
|
@ -629,6 +641,7 @@ func (im *InterfaceManager) updateIPAddresses(nl *link.Link) error {
|
||||||
})
|
})
|
||||||
if ipv6Addr == "" {
|
if ipv6Addr == "" {
|
||||||
ipv6Addr = addr.IP.String()
|
ipv6Addr = addr.IP.String()
|
||||||
|
ipv6Ready = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -637,6 +650,10 @@ func (im *InterfaceManager) updateIPAddresses(nl *link.Link) error {
|
||||||
im.state.IPv4Addresses = ipv4Addresses
|
im.state.IPv4Addresses = ipv4Addresses
|
||||||
im.state.IPv6Addresses = ipv6Addresses
|
im.state.IPv6Addresses = ipv6Addresses
|
||||||
im.state.IPv6LinkLocal = ipv6LinkLocal
|
im.state.IPv6LinkLocal = ipv6LinkLocal
|
||||||
|
im.state.IPv4Address = ipv4Addr
|
||||||
|
im.state.IPv6Address = ipv6Addr
|
||||||
|
im.state.IPv4Ready = ipv4Ready
|
||||||
|
im.state.IPv6Ready = ipv6Ready
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
@ -677,10 +694,12 @@ func (im *InterfaceManager) applyDHCPLease(lease *types.DHCPLease) error {
|
||||||
|
|
||||||
// convertDHCPLeaseToIPv4Config converts a DHCP lease to IPv4Config
|
// convertDHCPLeaseToIPv4Config converts a DHCP lease to IPv4Config
|
||||||
func (im *InterfaceManager) convertDHCPLeaseToIPv4Config(lease *types.DHCPLease) *types.IPAddress {
|
func (im *InterfaceManager) convertDHCPLeaseToIPv4Config(lease *types.DHCPLease) *types.IPAddress {
|
||||||
|
mask := lease.Netmask
|
||||||
|
|
||||||
// Create IPNet from IP and netmask
|
// Create IPNet from IP and netmask
|
||||||
ipNet := &net.IPNet{
|
ipNet := &net.IPNet{
|
||||||
IP: lease.IPAddress,
|
IP: lease.IPAddress,
|
||||||
Mask: net.IPMask(lease.Netmask),
|
Mask: net.IPv4Mask(mask[12], mask[13], mask[14], mask[15]),
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create IPv4Address
|
// Create IPv4Address
|
||||||
|
|
@ -691,7 +710,10 @@ func (im *InterfaceManager) convertDHCPLeaseToIPv4Config(lease *types.DHCPLease)
|
||||||
Permanent: false,
|
Permanent: false,
|
||||||
}
|
}
|
||||||
|
|
||||||
im.logger.Trace().Interface("ipv4Addr", ipv4Addr).Msg("converted DHCP lease to IPv4Config")
|
im.logger.Trace().
|
||||||
|
Interface("ipv4Addr", ipv4Addr).
|
||||||
|
Interface("lease", lease).
|
||||||
|
Msg("converted DHCP lease to IPv4Config")
|
||||||
|
|
||||||
// Create IPv4Config
|
// Create IPv4Config
|
||||||
return &ipv4Addr
|
return &ipv4Addr
|
||||||
|
|
|
||||||
|
|
@ -419,6 +419,7 @@ func (nm *NetlinkManager) ReconcileLinkAddrs(link *Link, expected []*types.IPAdd
|
||||||
|
|
||||||
for _, addr := range expected {
|
for _, addr := range expected {
|
||||||
ipCidr := addr.Address.IP.String() + "/" + addr.Address.Mask.String()
|
ipCidr := addr.Address.IP.String() + "/" + addr.Address.Mask.String()
|
||||||
|
nm.logger.Trace().Str("address", ipCidr).Msg("adding expected address")
|
||||||
expectedAddrs[ipCidr] = true
|
expectedAddrs[ipCidr] = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,20 @@ func (nm *NetworkManager) GetIPv4Addresses() []string {
|
||||||
return []string{}
|
return []string{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (nm *NetworkManager) GetIPv4Address() string {
|
||||||
|
for _, iface := range nm.interfaces {
|
||||||
|
return iface.GetIPv4Address()
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func (nm *NetworkManager) GetIPv6Address() string {
|
||||||
|
for _, iface := range nm.interfaces {
|
||||||
|
return iface.GetIPv6Address()
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
func (nm *NetworkManager) GetIPv6Addresses() []string {
|
func (nm *NetworkManager) GetIPv6Addresses() []string {
|
||||||
for _, iface := range nm.interfaces {
|
for _, iface := range nm.interfaces {
|
||||||
return iface.GetIPv6Addresses()
|
return iface.GetIPv6Addresses()
|
||||||
|
|
@ -61,19 +75,11 @@ func (nm *NetworkManager) GetMACAddress() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (nm *NetworkManager) IPv4String() string {
|
func (nm *NetworkManager) IPv4String() string {
|
||||||
l := nm.GetIPv4Addresses()
|
return nm.GetIPv4Address()
|
||||||
if len(l) == 0 {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
return l[0]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (nm *NetworkManager) IPv6String() string {
|
func (nm *NetworkManager) IPv6String() string {
|
||||||
l := nm.GetIPv6Addresses()
|
return nm.GetIPv6Address()
|
||||||
if len(l) == 0 {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
return l[0]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (nm *NetworkManager) MACString() string {
|
func (nm *NetworkManager) MACString() string {
|
||||||
|
|
|
||||||
|
|
@ -79,7 +79,9 @@ func (l *Lease) SetLeaseExpiry() (time.Time, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// UnmarshalDHCPCLease unmarshals a lease from a string.
|
// UnmarshalDHCPCLease unmarshals a lease from a string.
|
||||||
func UnmarshalDHCPCLease(lease *Lease, str string) error {
|
func UnmarshalDHCPCLease(obj *Lease, str string) error {
|
||||||
|
lease := &obj.DHCPLease
|
||||||
|
|
||||||
// parse the lease file as a map
|
// parse the lease file as a map
|
||||||
data := make(map[string]string)
|
data := make(map[string]string)
|
||||||
for line := range strings.SplitSeq(str, "\n") {
|
for line := range strings.SplitSeq(str, "\n") {
|
||||||
|
|
@ -161,7 +163,7 @@ func UnmarshalDHCPCLease(lease *Lease, str string) error {
|
||||||
valuesParsed[key] = true
|
valuesParsed[key] = true
|
||||||
}
|
}
|
||||||
|
|
||||||
lease.setIsEmpty(valuesParsed)
|
obj.setIsEmpty(valuesParsed)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue