From f710646afb04a9f874563f45c0c3417e729ee586 Mon Sep 17 00:00:00 2001 From: msagheer Date: Tue, 20 Sep 2016 17:57:45 +0500 Subject: [PATCH] restrict network creation in transit domain --- plugin/driver/driver.go | 5 +++++ plugin/driver/pg_helper.go | 22 +++++++++++++++++++++- plugin/driver/utils.go | 2 -- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/plugin/driver/driver.go b/plugin/driver/driver.go index a51dc71..c79aeba 100644 --- a/plugin/driver/driver.go +++ b/plugin/driver/driver.go @@ -137,6 +137,11 @@ func (driver *driver) createNetwork(w http.ResponseWriter, r *http.Request) { } DomainCreate(domainid.(string)) + if CheckExternalConnectivity(domainid.(string)) { + errorResponse(w, fmt.Sprintf("Non-external network cannot be created in transit domain.")) + return + } + gatewayip := create.IPv4Data[0].Gateway.IP.String() neName := create.Options[netlabel.GenericData].(map[string]interface{})["bridge"] diff --git a/plugin/driver/pg_helper.go b/plugin/driver/pg_helper.go index a2244c7..cd926f4 100644 --- a/plugin/driver/pg_helper.go +++ b/plugin/driver/pg_helper.go @@ -428,7 +428,7 @@ func CheckNeExists(ne_name, domain string) bool { url := "/0/connectivity/domain/" + domain + "/ne?configonly=true" - body, _ := RestCall("GET", url+"?configonly=true", nil) + body, _ := RestCall("GET", url, nil) var domain_data map[string]interface{} err := json.Unmarshal([]byte(body), &domain_data) if err != nil { @@ -443,3 +443,23 @@ func CheckNeExists(ne_name, domain string) bool { return false } + +func CheckExternalConnectivity(domain string) bool { + + url := "/0/connectivity/domain_prop/" + domain + "/ne?configonly=true" + + body, _ := RestCall("GET", url, nil) + var domain_data map[string]interface{} + err := json.Unmarshal([]byte(body), &domain_data) + if err != nil { + panic(err) + } + + for key, _ := range domain_data { + if key == "external_connectivity_enable" { + return true + } + } + + return false +} diff --git a/plugin/driver/utils.go b/plugin/driver/utils.go index 2c0f360..9e4bfe8 100644 --- a/plugin/driver/utils.go +++ b/plugin/driver/utils.go @@ -25,7 +25,6 @@ import ( ) // Response Functions - func notFound(w http.ResponseWriter, r *http.Request) { Log.Warningf("[plugin] Not found: %+v", r) http.NotFound(w, r) @@ -54,7 +53,6 @@ func emptyResponse(w http.ResponseWriter) { } // Helper Functions - func vethPair(suffix string) *netlink.Veth { return &netlink.Veth{ LinkAttrs: netlink.LinkAttrs{Name: "tap" + suffix},