Use of Scope for routes in IPAM
Add Scope for routes for cni spec v1.1 Signed-off-by: Lionel Jouin <lionel.jouin@est.tech>
This commit is contained in:
parent
01b3db8e01
commit
a6d6efa5ca
@ -123,8 +123,12 @@ func ConfigureIface(ifName string, res *current.Result) error {
|
|||||||
route.Table = *r.Table
|
route.Table = *r.Table
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if r.Scope != nil {
|
||||||
|
route.Scope = netlink.Scope(*r.Scope)
|
||||||
|
}
|
||||||
|
|
||||||
if err = netlink.RouteAddEcmp(&route); err != nil {
|
if err = netlink.RouteAddEcmp(&route); err != nil {
|
||||||
return fmt.Errorf("failed to add route '%v via %v dev %v (Table: %d)': %v", r.Dst, gw, ifName, route.Table, err)
|
return fmt.Errorf("failed to add route '%v via %v dev %v (Scope: %v, Table: %d)': %v", r.Dst, gw, ifName, route.Scope, route.Table, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,8 +41,9 @@ func ipNetEqual(a, b *net.IPNet) bool {
|
|||||||
|
|
||||||
var _ = Describe("ConfigureIface", func() {
|
var _ = Describe("ConfigureIface", func() {
|
||||||
var originalNS ns.NetNS
|
var originalNS ns.NetNS
|
||||||
var ipv4, ipv6, routev4, routev6 *net.IPNet
|
var ipv4, ipv6, routev4, routev6, routev4Scope *net.IPNet
|
||||||
var ipgw4, ipgw6, routegwv4, routegwv6 net.IP
|
var ipgw4, ipgw6, routegwv4, routegwv6 net.IP
|
||||||
|
var routeScope int
|
||||||
var result *current.Result
|
var result *current.Result
|
||||||
var routeTable int
|
var routeTable int
|
||||||
|
|
||||||
@ -78,6 +79,10 @@ var _ = Describe("ConfigureIface", func() {
|
|||||||
routegwv4 = net.ParseIP("1.2.3.5")
|
routegwv4 = net.ParseIP("1.2.3.5")
|
||||||
Expect(routegwv4).NotTo(BeNil())
|
Expect(routegwv4).NotTo(BeNil())
|
||||||
|
|
||||||
|
_, routev4Scope, err = net.ParseCIDR("1.2.3.4/32")
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
Expect(routev4Scope).NotTo(BeNil())
|
||||||
|
|
||||||
ipgw4 = net.ParseIP("1.2.3.1")
|
ipgw4 = net.ParseIP("1.2.3.1")
|
||||||
Expect(ipgw4).NotTo(BeNil())
|
Expect(ipgw4).NotTo(BeNil())
|
||||||
|
|
||||||
@ -95,6 +100,7 @@ var _ = Describe("ConfigureIface", func() {
|
|||||||
Expect(ipgw6).NotTo(BeNil())
|
Expect(ipgw6).NotTo(BeNil())
|
||||||
|
|
||||||
routeTable := 5000
|
routeTable := 5000
|
||||||
|
routeScope = 200
|
||||||
|
|
||||||
result = ¤t.Result{
|
result = ¤t.Result{
|
||||||
Interfaces: []*current.Interface{
|
Interfaces: []*current.Interface{
|
||||||
@ -125,6 +131,7 @@ var _ = Describe("ConfigureIface", func() {
|
|||||||
{Dst: *routev4, GW: routegwv4},
|
{Dst: *routev4, GW: routegwv4},
|
||||||
{Dst: *routev6, GW: routegwv6},
|
{Dst: *routev6, GW: routegwv6},
|
||||||
{Dst: *routev4, GW: routegwv4, Table: &routeTable},
|
{Dst: *routev4, GW: routegwv4, Table: &routeTable},
|
||||||
|
{Dst: *routev4Scope, Scope: &routeScope},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -166,7 +173,7 @@ var _ = Describe("ConfigureIface", func() {
|
|||||||
routes, err := netlink.RouteList(link, 0)
|
routes, err := netlink.RouteList(link, 0)
|
||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
|
||||||
var v4found, v6found bool
|
var v4found, v6found, v4Scopefound bool
|
||||||
for _, route := range routes {
|
for _, route := range routes {
|
||||||
isv4 := route.Dst.IP.To4() != nil
|
isv4 := route.Dst.IP.To4() != nil
|
||||||
if isv4 && ipNetEqual(route.Dst, routev4) && route.Gw.Equal(routegwv4) {
|
if isv4 && ipNetEqual(route.Dst, routev4) && route.Gw.Equal(routegwv4) {
|
||||||
@ -175,13 +182,17 @@ var _ = Describe("ConfigureIface", func() {
|
|||||||
if !isv4 && ipNetEqual(route.Dst, routev6) && route.Gw.Equal(routegwv6) {
|
if !isv4 && ipNetEqual(route.Dst, routev6) && route.Gw.Equal(routegwv6) {
|
||||||
v6found = true
|
v6found = true
|
||||||
}
|
}
|
||||||
|
if isv4 && ipNetEqual(route.Dst, routev4Scope) && int(route.Scope) == routeScope {
|
||||||
|
v4Scopefound = true
|
||||||
|
}
|
||||||
|
|
||||||
if v4found && v6found {
|
if v4found && v6found && v4Scopefound {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Expect(v4found).To(BeTrue())
|
Expect(v4found).To(BeTrue())
|
||||||
Expect(v6found).To(BeTrue())
|
Expect(v6found).To(BeTrue())
|
||||||
|
Expect(v4Scopefound).To(BeTrue())
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user