diff --git a/prog/weaveutil/datapath.go b/prog/weaveutil/datapath.go index f4494967..52e320f8 100644 --- a/prog/weaveutil/datapath.go +++ b/prog/weaveutil/datapath.go @@ -31,6 +31,19 @@ func deleteDatapath(args []string) error { return odp.DeleteDatapath(args[0]) } +// Checks whether a datapath can be created by actually creating and destroying it +func checkDatapath(args []string) error { + if len(args) != 1 { + cmdUsage("check-datapath", "") + } + + if err := createDatapath(args); err != nil { + return err + } + + return odp.DeleteDatapath(args[0]) +} + func addDatapathInterface(args []string) error { if len(args) != 2 { cmdUsage("add-datapath-interface", " ") diff --git a/prog/weaveutil/main.go b/prog/weaveutil/main.go index 46ffa719..b24a6fe5 100644 --- a/prog/weaveutil/main.go +++ b/prog/weaveutil/main.go @@ -21,6 +21,7 @@ func init() { "detect-bridge-type": detectBridgeType, "create-datapath": createDatapath, "delete-datapath": deleteDatapath, + "check-datapath": checkDatapath, "add-datapath-interface": addDatapathInterface, "create-plugin-network": createPluginNetwork, "remove-plugin-network": removePluginNetwork, diff --git a/weave b/weave index a4b7547f..cd3f90c8 100755 --- a/weave +++ b/weave @@ -442,7 +442,8 @@ validate_bridge_type() { detect_bridge_type || return 0 if [ -n "$LAUNCHING_ROUTER" ] ; then - if [ "$BRIDGE_TYPE" = bridge -a -z "$WEAVE_NO_FASTDP" ] ; then + if [ "$BRIDGE_TYPE" = bridge -a -z "$WEAVE_NO_FASTDP" ] && + util_op check-datapath 2>/dev/null ; then cat <&2 WEAVE_NO_FASTDP is not set, but there is already a bridge present of the wrong type for fast datapath. Please do 'weave reset' to remove