From 419f2ff71bb4bf5fc00ae5a45ec599f8fbc13e6d Mon Sep 17 00:00:00 2001 From: Matthias Radestock Date: Sat, 2 Jan 2016 13:40:07 +0000 Subject: [PATCH] move fastdp helpers into weaveutil so the weave script can invoke them w/o having to run a container --- prog/weaver/main.go | 39 ++------------------------------------ prog/weaveutil/datapath.go | 39 ++++++++++++++++++++++++++++++++++++++ prog/weaveutil/main.go | 9 ++++++--- weave | 8 ++++++-- 4 files changed, 53 insertions(+), 42 deletions(-) create mode 100644 prog/weaveutil/datapath.go diff --git a/prog/weaver/main.go b/prog/weaver/main.go index a1a81a8c..a50eda64 100644 --- a/prog/weaver/main.go +++ b/prog/weaver/main.go @@ -16,7 +16,6 @@ import ( . "github.com/weaveworks/weave/common" "github.com/weaveworks/weave/common/docker" - "github.com/weaveworks/weave/common/odp" "github.com/weaveworks/weave/ipam" "github.com/weaveworks/weave/mesh" "github.com/weaveworks/weave/nameserver" @@ -37,12 +36,7 @@ func main() { runtime.GOMAXPROCS(procs) var ( - // flags that cause immediate exit - justVersion bool - createDatapath bool - deleteDatapath bool - addDatapathInterface string - + justVersion bool config mesh.Config networkConfig weave.NetworkConfig protocolMinVersion int @@ -79,10 +73,6 @@ func main() { } mflag.BoolVar(&justVersion, []string{"#version", "-version"}, false, "print version and exit") - mflag.BoolVar(&createDatapath, []string{"-create-datapath"}, false, "create ODP datapath and exit") - mflag.BoolVar(&deleteDatapath, []string{"-delete-datapath"}, false, "delete ODP datapath and exit") - mflag.StringVar(&addDatapathInterface, []string{"-add-datapath-iface"}, "", "add a network interface to the ODP datapath and exit") - mflag.IntVar(&config.Port, []string{"#port", "-port"}, mesh.Port, "router port") mflag.IntVar(&protocolMinVersion, []string{"-min-protocol-version"}, mesh.ProtocolMinVersion, "minimum weave protocol version") mflag.StringVar(&ifaceName, []string{"#iface", "-iface"}, "", "name of interface to capture/inject from (disabled if blank)") @@ -124,34 +114,9 @@ func main() { SetLogLevel(logLevel) - switch { - case justVersion: + if justVersion { fmt.Printf("weave router %s\n", version) os.Exit(0) - - case createDatapath: - odpSupported, err := odp.CreateDatapath(datapathName) - if !odpSupported { - if err != nil { - Log.Error(err) - } - - // When the kernel lacks ODP support, exit - // with a special status to distinguish it for - // the weave script. - os.Exit(17) - } - - checkFatal(err) - os.Exit(0) - - case deleteDatapath: - checkFatal(odp.DeleteDatapath(datapathName)) - os.Exit(0) - - case addDatapathInterface != "": - checkFatal(odp.AddDatapathInterface(datapathName, addDatapathInterface)) - os.Exit(0) } Log.Println("Command line options:", options()) diff --git a/prog/weaveutil/datapath.go b/prog/weaveutil/datapath.go new file mode 100644 index 00000000..f4494967 --- /dev/null +++ b/prog/weaveutil/datapath.go @@ -0,0 +1,39 @@ +// various fastdp operations +package main + +import ( + "fmt" + "os" + + "github.com/weaveworks/weave/common/odp" +) + +func createDatapath(args []string) error { + if len(args) != 1 { + cmdUsage("create-datapath", "") + } + odpSupported, err := odp.CreateDatapath(args[0]) + if !odpSupported { + if err != nil { + fmt.Fprintln(os.Stderr, err) + } + // When the kernel lacks ODP support, exit with a special + // status to distinguish it for the weave script. + os.Exit(17) + } + return err +} + +func deleteDatapath(args []string) error { + if len(args) != 1 { + cmdUsage("delete-datapath", "") + } + return odp.DeleteDatapath(args[0]) +} + +func addDatapathInterface(args []string) error { + if len(args) != 2 { + cmdUsage("add-datapath-interface", " ") + } + return odp.AddDatapathInterface(args[0], args[1]) +} diff --git a/prog/weaveutil/main.go b/prog/weaveutil/main.go index 2d1aed8c..539e5c89 100644 --- a/prog/weaveutil/main.go +++ b/prog/weaveutil/main.go @@ -10,9 +10,12 @@ var commands map[string]func([]string) error func init() { commands = map[string]func([]string) error{ - "help": help, - "netcheck": netcheck, - "docker-tls-args": dockerTLSArgs, + "help": help, + "netcheck": netcheck, + "docker-tls-args": dockerTLSArgs, + "create-datapath": createDatapath, + "delete-datapath": deleteDatapath, + "add-datapath-interface": addDatapathInterface, } } diff --git a/weave b/weave index 7dda1a26..f86595f7 100755 --- a/weave +++ b/weave @@ -445,7 +445,11 @@ random_mac() { ###################################################################### fastdp_op() { - docker run --rm --privileged --net=host $IMAGE $COVERAGE_ARGS --$1 --datapath=$2 + if command_exists weaveutil ; then + weaveutil "$@" + else + docker run --rm --privileged --net=host --entrypoint=/usr/bin/weaveutil $EXEC_IMAGE "$@" + fi } # Detect the current bridge/datapath state. When invoked, the values of @@ -764,7 +768,7 @@ connect_container_to_bridge() { } add_iface_fastdp() { - fastdp_op add-datapath-iface=$1 $DATAPATH + fastdp_op add-datapath-interface $DATAPATH $1 } add_iface_bridge() {