Bladeren bron

Merge pull request #803 from julia-stripe/set-link-index

Fix route deletion when replacing route in hostgw backend
Tom Denham 7 jaren geleden
bovenliggende
commit
e1b22bc02c
1 gewijzigde bestanden met toevoegingen van 12 en 9 verwijderingen
  1. 12 9
      backend/hostgw/hostgw_network.go

+ 12 - 9
backend/hostgw/hostgw_network.go

@@ -29,12 +29,11 @@ import (
 )
 )
 
 
 type network struct {
 type network struct {
-	name      string
-	extIface  *backend.ExternalInterface
-	linkIndex int
-	rl        []netlink.Route
-	lease     *subnet.Lease
-	sm        subnet.Manager
+	name     string
+	extIface *backend.ExternalInterface
+	rl       []netlink.Route
+	lease    *subnet.Lease
+	sm       subnet.Manager
 }
 }
 
 
 func (n *network) Lease() *subnet.Lease {
 func (n *network) Lease() *subnet.Lease {
@@ -45,6 +44,10 @@ func (n *network) MTU() int {
 	return n.extIface.Iface.MTU
 	return n.extIface.Iface.MTU
 }
 }
 
 
+func (n *network) LinkIndex() int {
+	return n.extIface.Iface.Index
+}
+
 func (n *network) Run(ctx context.Context) {
 func (n *network) Run(ctx context.Context) {
 	wg := sync.WaitGroup{}
 	wg := sync.WaitGroup{}
 
 
@@ -90,7 +93,7 @@ func (n *network) handleSubnetEvents(batch []subnet.Event) {
 			route := netlink.Route{
 			route := netlink.Route{
 				Dst:       evt.Lease.Subnet.ToIPNet(),
 				Dst:       evt.Lease.Subnet.ToIPNet(),
 				Gw:        evt.Lease.Attrs.PublicIP.ToIP(),
 				Gw:        evt.Lease.Attrs.PublicIP.ToIP(),
-				LinkIndex: n.linkIndex,
+				LinkIndex: n.LinkIndex(),
 			}
 			}
 
 
 			// Check if route exists before attempting to add it
 			// Check if route exists before attempting to add it
@@ -104,7 +107,7 @@ func (n *network) handleSubnetEvents(batch []subnet.Event) {
 			if len(routeList) > 0 && !routeList[0].Gw.Equal(route.Gw) {
 			if len(routeList) > 0 && !routeList[0].Gw.Equal(route.Gw) {
 				// Same Dst different Gw. Remove it, correct route will be added below.
 				// Same Dst different Gw. Remove it, correct route will be added below.
 				log.Warningf("Replacing existing route to %v via %v with %v via %v.", evt.Lease.Subnet, routeList[0].Gw, evt.Lease.Subnet, evt.Lease.Attrs.PublicIP)
 				log.Warningf("Replacing existing route to %v via %v with %v via %v.", evt.Lease.Subnet, routeList[0].Gw, evt.Lease.Subnet, evt.Lease.Attrs.PublicIP)
-				if err := netlink.RouteDel(&route); err != nil {
+				if err := netlink.RouteDel(&routeList[0]); err != nil {
 					log.Errorf("Error deleting route to %v: %v", evt.Lease.Subnet, err)
 					log.Errorf("Error deleting route to %v: %v", evt.Lease.Subnet, err)
 					continue
 					continue
 				}
 				}
@@ -129,7 +132,7 @@ func (n *network) handleSubnetEvents(batch []subnet.Event) {
 			route := netlink.Route{
 			route := netlink.Route{
 				Dst:       evt.Lease.Subnet.ToIPNet(),
 				Dst:       evt.Lease.Subnet.ToIPNet(),
 				Gw:        evt.Lease.Attrs.PublicIP.ToIP(),
 				Gw:        evt.Lease.Attrs.PublicIP.ToIP(),
-				LinkIndex: n.linkIndex,
+				LinkIndex: n.LinkIndex(),
 			}
 			}
 			if err := netlink.RouteDel(&route); err != nil {
 			if err := netlink.RouteDel(&route); err != nil {
 				log.Errorf("Error deleting route to %v: %v", evt.Lease.Subnet, err)
 				log.Errorf("Error deleting route to %v: %v", evt.Lease.Subnet, err)