Skip to content

Commit

Permalink
replace iptree on the servicecidr controller
Browse files Browse the repository at this point in the history
  • Loading branch information
aojea committed Jun 27, 2024
1 parent f06b355 commit b5cfccb
Show file tree
Hide file tree
Showing 4 changed files with 429 additions and 102 deletions.
40 changes: 40 additions & 0 deletions pkg/api/servicecidr/servicecidr.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,46 @@ import (
networkinglisters "k8s.io/client-go/listers/networking/v1alpha1"
)

// OverlapsPrefix return the list of ServiceCIDR that overlaps with the prefix passed as argument
func OverlapsPrefix(serviceCIDRLister networkinglisters.ServiceCIDRLister, prefix netip.Prefix) []*networkingv1alpha1.ServiceCIDR {
result := []*networkingv1alpha1.ServiceCIDR{}
serviceCIDRList, err := serviceCIDRLister.List(labels.Everything())
if err != nil {
return result
}

for _, serviceCIDR := range serviceCIDRList {
for _, cidr := range serviceCIDR.Spec.CIDRs {
if p, err := netip.ParsePrefix(cidr); err == nil { // it can not fail since is already validated
if p.Overlaps(prefix) {
result = append(result, serviceCIDR)
}
}
}
}
return result
}

// ContainsPrefix return the list of ServiceCIDR that contains the prefix passed as argument
func ContainsPrefix(serviceCIDRLister networkinglisters.ServiceCIDRLister, prefix netip.Prefix) []*networkingv1alpha1.ServiceCIDR {
result := []*networkingv1alpha1.ServiceCIDR{}
serviceCIDRList, err := serviceCIDRLister.List(labels.Everything())
if err != nil {
return result
}

for _, serviceCIDR := range serviceCIDRList {
for _, cidr := range serviceCIDR.Spec.CIDRs {
if p, err := netip.ParsePrefix(cidr); err == nil { // it can not fail since is already validated
if p.Overlaps(prefix) && p.Bits() <= prefix.Bits() {
result = append(result, serviceCIDR)
}
}
}
}
return result
}

// ContainsIP return the list of ServiceCIDR that contains the IP address passed as argument
func ContainsIP(serviceCIDRLister networkinglisters.ServiceCIDRLister, ip net.IP) []*networkingv1alpha1.ServiceCIDR {
address := IPToAddr(ip)
Expand Down
Loading

0 comments on commit b5cfccb

Please sign in to comment.