Skip to content

Commit a9734dc

Browse files
committed
add checks against router and bridge options
1 parent e1ed253 commit a9734dc

2 files changed

Lines changed: 51 additions & 4 deletions

File tree

plugin/driver/driver.go

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,12 @@ func (driver *driver) createNetwork(w http.ResponseWriter, r *http.Request) {
138138
neName := create.Options[netlabel.GenericData].(map[string]interface{})["bridge"]
139139

140140
if neName != nil {
141-
AddNetworkInfo(create.NetworkID, neName.(string), domainid.(string))
141+
if err := AddNetworkInfo(create.NetworkID, neName.(string), domainid.(string)); err != nil {
142+
Log.Error(err)
143+
DomainDelete(domainid.(string))
144+
errorResponse(w, fmt.Sprintf("Bridge (%s) doesnot exist in doamin (%s).", neName.(string), domainid.(string)))
145+
return
146+
}
142147
AddGatewayInfo(create.NetworkID, domainid.(string), gatewayip)
143148
emptyResponse(w)
144149

@@ -154,7 +159,13 @@ func (driver *driver) createNetwork(w http.ResponseWriter, r *http.Request) {
154159
tm, _ := hex.DecodeString(ipnet.Mask.String())
155160
netmask := fmt.Sprintf("%v.%v.%v.%v", tm[0], tm[1], tm[2], tm[3])
156161
Log.Infof("Adding router interface for : ", router, gatewayip, netmask)
157-
CreateNetworkLink(router.(string), domainid.(string), create.NetworkID, gatewayip, netmask)
162+
if err := CreateNetworkLink(router.(string), domainid.(string), create.NetworkID, gatewayip, netmask); err != nil {
163+
Log.Error(err)
164+
BridgeDelete(create.NetworkID, domainid.(string))
165+
DomainDelete(domainid.(string))
166+
errorResponse(w, fmt.Sprintf("Router (%s) doesnot exist in doamin (%s).", router.(string), domainid.(string)))
167+
return
168+
}
158169
}
159170

160171
emptyResponse(w)
@@ -276,6 +287,7 @@ func (driver *driver) joinEndpoint(w http.ResponseWriter, r *http.Request) {
276287
if err := ifc_ctl.PgIfUp(if_local_name, "cont_"+endID[:8], domainid, bridgeID, mac, "gateway"); err != nil {
277288
Log.Error(err)
278289
errorResponse(w, "Unable to on-board container onto PLUMgrid")
290+
return
279291
}
280292

281293
if netlink.LinkSetUp(local) != nil {
@@ -316,6 +328,7 @@ func (driver *driver) leaveEndpoint(w http.ResponseWriter, r *http.Request) {
316328
if err := ifc_ctl.PgIfDown(if_local_name, "gateway"); err != nil {
317329
Log.Error(err)
318330
errorResponse(w, "Unable to off-board container from PLUMgrid")
331+
return
319332
}
320333

321334
RemoveMetaconfig(domainid, bridgeID, l.EndpointID)

plugin/driver/pg_helper.go

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ package driver
1616

1717
import (
1818
"encoding/json"
19+
"fmt"
1920
"strings"
2021
)
2122

@@ -77,14 +78,19 @@ func BridgeDelete(ID string, domainid string) {
7778
RestCall("DELETE", url, nil)
7879
}
7980

80-
func AddNetworkInfo(dNetwork string, neName string, domain string) {
81+
func AddNetworkInfo(dNetwork string, neName string, domain string) error {
82+
8183
id := GetNeId(neName, domain)
8284
var neId string
8385
if id == "" {
8486
neId = neName
8587
} else {
8688
neId = id
8789
}
90+
if !CheckNeExists(neId, domain) {
91+
return fmt.Errorf("Bridge (%s) doesnot exist in doamin (%s).", neName, domain)
92+
}
93+
8894
url := "/0/connectivity/domain/" + domain + "/ne/" + neId
8995
body, _ := RestCall("GET", url+"?configonly=true", nil)
9096
var netData map[string]interface{}
@@ -95,6 +101,8 @@ func AddNetworkInfo(dNetwork string, neName string, domain string) {
95101
netData["metadata"] = dNetwork
96102
finalData, _ := json.Marshal(netData)
97103
RestCall("PUT", url, finalData)
104+
105+
return nil
98106
}
99107

100108
func FindDomainFromNetwork(ID string) (domainid string, netid string) {
@@ -238,9 +246,13 @@ func GetNeId(NeName string, DomainID string) (NeID string) {
238246
return ""
239247
}
240248

241-
func CreateNetworkLink(NeName string, DomainID string, NetworkID string, IP string, Netmask string) {
249+
func CreateNetworkLink(NeName string, DomainID string, NetworkID string, IP string, Netmask string) error {
242250

243251
ne_ID := GetNeId(NeName, DomainID)
252+
if !CheckNeExists(ne_ID, DomainID) {
253+
return fmt.Errorf("Router (%s) doesnot exist in doamin (%s).", NeName, DomainID)
254+
}
255+
244256
CheckNeChildList(ne_ID, DomainID, "ifc")
245257
CheckNeChildList(NetworkName(NetworkID), DomainID, "ifc")
246258
ne_ifc := NetworkID
@@ -271,6 +283,8 @@ func CreateNetworkLink(NeName string, DomainID string, NetworkID string, IP stri
271283
"attachment1": "/ne/` + ne_ID + `/ifc/` + ne_ifc + `",
272284
"attachment2": "/ne/` + NetworkName(NetworkID) + `/ifc/` + net_ifc + `"}`)
273285
RestCall("PUT", url, data)
286+
287+
return nil
274288
}
275289

276290
func DeleteNetworkLinks(DomainID string, NetworkID string) {
@@ -409,3 +423,23 @@ func DeleteAttachedLB(DomainID string, NetworkID string) {
409423
}
410424
}
411425
}
426+
427+
func CheckNeExists(ne_name, domain string) bool {
428+
429+
url := "/0/connectivity/domain/" + domain + "/ne?configonly=true"
430+
431+
body, _ := RestCall("GET", url+"?configonly=true", nil)
432+
var domain_data map[string]interface{}
433+
err := json.Unmarshal([]byte(body), &domain_data)
434+
if err != nil {
435+
panic(err)
436+
}
437+
438+
for ne, _ := range domain_data {
439+
if ne_name == ne {
440+
return true
441+
}
442+
}
443+
444+
return false
445+
}

0 commit comments

Comments
 (0)