...

Source file src/edge-infra.dev/pkg/sds/ien/k8s/controllers/nodeagent/plugins/networking/netplan/internal/ip.go

Documentation: edge-infra.dev/pkg/sds/ien/k8s/controllers/nodeagent/plugins/networking/netplan/internal

     1  package internal
     2  
     3  import (
     4  	"net"
     5  	"net/netip"
     6  )
     7  
     8  // iterates parent subnet and returns a list of IPs paired in /31 subnets (2 ips)
     9  func PairTunnelIPs(subnet *net.IPNet) ([]*net.IPNet, error) {
    10  	addressPairings := []*net.IPNet{}
    11  
    12  	prefix, err := netip.ParsePrefix(subnet.String())
    13  	if err != nil {
    14  		return nil, err
    15  	}
    16  
    17  	prefix = prefix.Masked()
    18  	addr := prefix.Addr()
    19  	for {
    20  		if !prefix.Contains(addr) {
    21  			break
    22  		}
    23  
    24  		ip := net.IP(addr.AsSlice()).String() + "/31"
    25  		_, nextPairedSubnet, _ := net.ParseCIDR(ip)
    26  		addr = addr.Next()
    27  
    28  		if !prefix.Contains(addr) {
    29  			break
    30  		}
    31  
    32  		addr = addr.Next()
    33  
    34  		addressPairings = append(addressPairings, nextPairedSubnet)
    35  	}
    36  
    37  	return addressPairings, nil
    38  }
    39  

View as plain text