From 0e6569d78cadbfbf3c66c9711085b1fe45cc764d Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Thu, 11 Jun 2015 14:51:09 +0100 Subject: [PATCH] New program netcheck to check if network overlaps routes --- .gitignore | 2 ++ Makefile | 8 +++++--- prog/netcheck/netcheck.go | 31 +++++++++++++++++++++++++++++++ prog/weaveexec/Dockerfile | 1 + 4 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 prog/netcheck/netcheck.go diff --git a/.gitignore b/.gitignore index 6cdb2e7b..6c9406eb 100644 --- a/.gitignore +++ b/.gitignore @@ -35,6 +35,7 @@ prog/weavedns/weavedns prog/weaveproxy/weaveproxy prog/sigproxy/sigproxy prog/weavewait/weavewait +prog/netcheck/netcheck tools/bin tools/build releases @@ -45,6 +46,7 @@ prog/weaveexec/weave prog/weaveexec/weaveproxy prog/weaveexec/weavewait prog/weaveexec/sigproxy +prog/weaveexec/netcheck prog/weaveexec/docker*.tgz Vagrantfile.local test/tls/*.pem diff --git a/Makefile b/Makefile index 07b84f91..eb425efa 100644 --- a/Makefile +++ b/Makefile @@ -14,8 +14,9 @@ WEAVEDNS_EXE=prog/weavedns/weavedns WEAVEPROXY_EXE=prog/weaveproxy/weaveproxy SIGPROXY_EXE=prog/sigproxy/sigproxy WEAVEWAIT_EXE=prog/weavewait/weavewait +NETCHECK_EXE=prog/netcheck/netcheck -EXES=$(WEAVER_EXE) $(WEAVEDNS_EXE) $(SIGPROXY_EXE) $(WEAVEPROXY_EXE) $(WEAVEWAIT_EXE) +EXES=$(WEAVER_EXE) $(WEAVEDNS_EXE) $(SIGPROXY_EXE) $(WEAVEPROXY_EXE) $(WEAVEWAIT_EXE) $(NETCHECK_EXE) WEAVER_IMAGE=$(DOCKERHUB_USER)/weave WEAVEDNS_IMAGE=$(DOCKERHUB_USER)/weavedns @@ -40,7 +41,7 @@ travis: $(EXES) update: $(EXES) go get -u -f -v -tags -netgo $(addprefix ./,$(dir $(EXES))) -$(WEAVER_EXE) $(WEAVEDNS_EXE) $(WEAVEPROXY_EXE): common/*.go common/*/*.go net/*.go +$(WEAVER_EXE) $(WEAVEDNS_EXE) $(WEAVEPROXY_EXE) $(NETCHECK_EXE): common/*.go common/*/*.go net/*.go go get -tags netgo ./$(@D) go build -ldflags "-extldflags \"-static\" -X main.version $(WEAVE_VERSION)" -tags netgo -o $@ ./$(@D) @strings $@ | grep cgo_stub\\\.go >/dev/null || { \ @@ -73,11 +74,12 @@ $(WEAVEDNS_EXPORT): prog/weavedns/Dockerfile $(WEAVEDNS_EXE) $(SUDO) docker build -t $(WEAVEDNS_IMAGE) prog/weavedns $(SUDO) docker save $(WEAVEDNS_IMAGE):latest > $@ -$(WEAVEEXEC_EXPORT): prog/weaveexec/Dockerfile $(DOCKER_DISTRIB) weave $(SIGPROXY_EXE) $(WEAVEPROXY_EXE) $(WEAVEWAIT_EXE) +$(WEAVEEXEC_EXPORT): prog/weaveexec/Dockerfile $(DOCKER_DISTRIB) weave $(SIGPROXY_EXE) $(WEAVEPROXY_EXE) $(WEAVEWAIT_EXE) $(NETCHECK_EXE) cp weave prog/weaveexec/weave cp $(SIGPROXY_EXE) prog/weaveexec/sigproxy cp $(WEAVEPROXY_EXE) prog/weaveexec/weaveproxy cp $(WEAVEWAIT_EXE) prog/weaveexec/weavewait + cp $(NETCHECK_EXE) prog/weaveexec/netcheck cp $(DOCKER_DISTRIB) prog/weaveexec/docker.tgz $(SUDO) docker build -t $(WEAVEEXEC_IMAGE) prog/weaveexec $(SUDO) docker save $(WEAVEEXEC_IMAGE):latest > $@ diff --git a/prog/netcheck/netcheck.go b/prog/netcheck/netcheck.go new file mode 100644 index 00000000..383f5d9b --- /dev/null +++ b/prog/netcheck/netcheck.go @@ -0,0 +1,31 @@ +/* netcheck: check whether a given network overlaps with any existing routes */ +package main + +import ( + "fmt" + "net" + "os" + + weavenet "github.com/weaveworks/weave/net" +) + +func fatal(err error) { + fmt.Println(err) + os.Exit(1) +} + +func main() { + if len(os.Args) <= 1 { + os.Exit(0) + } + + ipRangeStr := os.Args[1] + _, ipnet, err := net.ParseCIDR(ipRangeStr) + if err != nil { + fatal(err) + } + if err := weavenet.CheckNetworkFree(ipnet); err != nil { + fatal(err) + } + os.Exit(0) +} diff --git a/prog/weaveexec/Dockerfile b/prog/weaveexec/Dockerfile index 8d8c3eff..c4cdb7a3 100644 --- a/prog/weaveexec/Dockerfile +++ b/prog/weaveexec/Dockerfile @@ -16,6 +16,7 @@ WORKDIR /home/weave ADD ./weave /home/weave/ ADD ./sigproxy /home/weave/ ADD ./weaveproxy /home/weave/ +ADD ./netcheck /usr/bin/ ADD ./weavewait /w/w ADD ./docker.tgz /