浏览代码

Make sure route selected is direct
Signed-off-by: Clint Armstrong <clint@clintarmstrong.net>

Clint Armstrong 9 年之前
父节点
当前提交
fa68f9d017
共有 1 个文件被更改,包括 14 次插入2 次删除
  1. 14 2
      libnetwork/osl/route_linux.go

+ 14 - 2
libnetwork/osl/route_linux.go

@@ -83,17 +83,29 @@ func (n *networkNamespace) programGateway(gw net.IP, isAdd bool) error {
 		return fmt.Errorf("route for the gateway %s could not be found: %v", gw, err)
 	}
 
+	var linkIndex int
+	for _, gwRoute := range gwRoutes {
+		if gwRoute.Gw == nil {
+			linkIndex = gwRoute.LinkIndex
+			break
+		}
+	}
+
+	if linkIndex == 0 {
+		return fmt.Errorf("Direct route for the gateway %s could not be found", gw)
+	}
+
 	if isAdd {
 		return n.nlHandle.RouteAdd(&netlink.Route{
 			Scope:     netlink.SCOPE_UNIVERSE,
-			LinkIndex: gwRoutes[0].LinkIndex,
+			LinkIndex: linkIndex,
 			Gw:        gw,
 		})
 	}
 
 	return n.nlHandle.RouteDel(&netlink.Route{
 		Scope:     netlink.SCOPE_UNIVERSE,
-		LinkIndex: gwRoutes[0].LinkIndex,
+		LinkIndex: linkIndex,
 		Gw:        gw,
 	})
 }