Skip to content

Commit

Permalink
Include the network mask in k8s.ovn.org/host-addresses
Browse files Browse the repository at this point in the history
Signed-off-by: Patryk Diak <pdiak@redhat.com>
  • Loading branch information
kyrtapz authored and martinkennelly committed Aug 16, 2023
1 parent ec84e0c commit 8847618
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 18 deletions.
8 changes: 4 additions & 4 deletions go-controller/pkg/node/gateway_localnet_linux_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,8 @@ func startNodePortWatcher(n *nodePortWatcher, fakeClient *util.OVNNodeClientset,
k := &kube.Kube{KClient: fakeClient.KubeClient}
n.nodeIPManager = newAddressManagerInternal(fakeNodeName, k, fakeMgmtPortConfig, n.watchFactory, nil, false)
localHostNetEp := "192.168.18.15/32"
ip, _, _ := net.ParseCIDR(localHostNetEp)
n.nodeIPManager.addAddr(ip)
ip, ipnet, _ := net.ParseCIDR(localHostNetEp)
n.nodeIPManager.addAddr(net.IPNet{IP: ip, Mask: ipnet.Mask})

// set up a controller to handle events on services to mock the nodeportwatcher bits
// in gateway.go and trigger code in gateway_shared_intf.go
Expand Down Expand Up @@ -100,8 +100,8 @@ func startNodePortWatcherWithRetry(n *nodePortWatcher, fakeClient *util.OVNNodeC
k := &kube.Kube{KClient: fakeClient.KubeClient}
n.nodeIPManager = newAddressManagerInternal(fakeNodeName, k, fakeMgmtPortConfig, n.watchFactory, nil, false)
localHostNetEp := "192.168.18.15/32"
ip, _, _ := net.ParseCIDR(localHostNetEp)
n.nodeIPManager.addAddr(ip)
ip, ipnet, _ := net.ParseCIDR(localHostNetEp)
n.nodeIPManager.addAddr(net.IPNet{IP: ip, Mask: ipnet.Mask})

nodePortWatcherRetry := n.newRetryFrameworkForTests(factory.ServiceForFakeNodePortWatcherType, stopChan, wg)
if _, err := nodePortWatcherRetry.WatchResource(); err != nil {
Expand Down
30 changes: 16 additions & 14 deletions go-controller/pkg/node/node_ip_handler_linux.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,12 +67,12 @@ func newAddressManagerInternal(nodeName string, k kube.Interface, config *manage

// updates the address manager with a new IP
// returns true if there was an update
func (c *addressManager) addAddr(ip net.IP) bool {
func (c *addressManager) addAddr(ipnet net.IPNet) bool {
c.Lock()
defer c.Unlock()
if !c.addresses.Has(ip.String()) && c.isValidNodeIP(ip) {
klog.Infof("Adding IP: %s, to node IP manager", ip)
c.addresses.Insert(ip.String())
if !c.addresses.Has(ipnet.String()) && c.isValidNodeIP(ipnet.IP) {
klog.Infof("Adding IP: %s, to node IP manager", ipnet)
c.addresses.Insert(ipnet.String())
return true
}

Expand All @@ -81,12 +81,12 @@ func (c *addressManager) addAddr(ip net.IP) bool {

// removes IP from address manager
// returns true if there was an update
func (c *addressManager) delAddr(ip net.IP) bool {
func (c *addressManager) delAddr(ipnet net.IPNet) bool {
c.Lock()
defer c.Unlock()
if c.addresses.Has(ip.String()) && c.isValidNodeIP(ip) {
klog.Infof("Removing IP: %s, from node IP manager", ip)
c.addresses.Delete(ip.String())
if c.addresses.Has(ipnet.String()) && c.isValidNodeIP(ipnet.IP) {
klog.Infof("Removing IP: %s, from node IP manager", ipnet)
c.addresses.Delete(ipnet.String())
return true
}

Expand All @@ -100,8 +100,9 @@ func (c *addressManager) ListAddresses() []net.IP {
addrs := sets.List(c.addresses)
out := make([]net.IP, 0, len(addrs))
for _, addr := range addrs {
ip := net.ParseIP(addr)
if ip == nil {
ip, _, err := net.ParseCIDR(addr)
if err != nil {
klog.Errorf("Failed to parse %s: %v", addr, err)
continue
}
out = append(out, ip)
Expand Down Expand Up @@ -172,9 +173,9 @@ func (c *addressManager) runInternal(stopChan <-chan struct{}, doneWg *sync.Wait
}
addrChanged := false
if a.NewAddr {
addrChanged = c.addAddr(a.LinkAddress.IP)
addrChanged = c.addAddr(a.LinkAddress)
} else {
addrChanged = c.delAddr(a.LinkAddress.IP)
addrChanged = c.delAddr(a.LinkAddress)
}

c.handleNodePrimaryAddrChange()
Expand Down Expand Up @@ -430,7 +431,7 @@ func (c *addressManager) sync() {

currAddresses := sets.New[string]()
for _, addr := range addrs {
ip, _, err := net.ParseCIDR(addr.String())
ip, ipnet, err := net.ParseCIDR(addr.String())
if err != nil {
klog.Errorf("Invalid IP address found on host: %s", addr.String())
continue
Expand All @@ -439,7 +440,8 @@ func (c *addressManager) sync() {
klog.V(5).Infof("Skipping non-useable IP address for host: %s", ip.String())
continue
}
currAddresses.Insert(ip.String())
netAddr := &net.IPNet{IP: ip, Mask: ipnet.Mask}
currAddresses.Insert(netAddr.String())
}

addrChanged := c.assignAddresses(currAddresses)
Expand Down

0 comments on commit 8847618

Please sign in to comment.