1515package driver
1616
1717import (
18+ "bytes"
1819 "encoding/hex"
1920 "encoding/json"
2021 "fmt"
2122 "io"
2223 "net"
2324 "net/http"
25+ "os/exec"
2426
2527 Log "github.com/Sirupsen/logrus"
2628 "github.com/docker/libnetwork/drivers/remote/api"
2729 "github.com/docker/libnetwork/netlabel"
2830 docker "github.com/fsouza/go-dockerclient"
29- "github.com/plumgrid/cli/helpers/plumgrid/ifc_ctl"
3031
3132 "github.com/gorilla/mux"
3233 "github.com/vishvananda/netlink"
@@ -138,7 +139,12 @@ func (driver *driver) createNetwork(w http.ResponseWriter, r *http.Request) {
138139 neName := create .Options [netlabel .GenericData ].(map [string ]interface {})["bridge" ]
139140
140141 if neName != nil {
141- AddNetworkInfo (create .NetworkID , neName .(string ), domainid .(string ))
142+ if err := AddNetworkInfo (create .NetworkID , neName .(string ), domainid .(string )); err != nil {
143+ Log .Error (err )
144+ DomainDelete (domainid .(string ))
145+ errorResponse (w , fmt .Sprintf ("Bridge (%s) doesnot exist in doamin (%s)." , neName .(string ), domainid .(string )))
146+ return
147+ }
142148 AddGatewayInfo (create .NetworkID , domainid .(string ), gatewayip )
143149 emptyResponse (w )
144150
@@ -154,7 +160,13 @@ func (driver *driver) createNetwork(w http.ResponseWriter, r *http.Request) {
154160 tm , _ := hex .DecodeString (ipnet .Mask .String ())
155161 netmask := fmt .Sprintf ("%v.%v.%v.%v" , tm [0 ], tm [1 ], tm [2 ], tm [3 ])
156162 Log .Infof ("Adding router interface for : " , router , gatewayip , netmask )
157- CreateNetworkLink (router .(string ), domainid .(string ), create .NetworkID , gatewayip , netmask )
163+ if err := CreateNetworkLink (router .(string ), domainid .(string ), create .NetworkID , gatewayip , netmask ); err != nil {
164+ Log .Error (err )
165+ BridgeDelete (create .NetworkID , domainid .(string ))
166+ DomainDelete (domainid .(string ))
167+ errorResponse (w , fmt .Sprintf ("Router (%s) doesnot exist in doamin (%s)." , router .(string ), domainid .(string )))
168+ return
169+ }
158170 }
159171
160172 emptyResponse (w )
@@ -272,14 +284,36 @@ func (driver *driver) joinEndpoint(w http.ResponseWriter, r *http.Request) {
272284 mac := link .Attrs ().HardwareAddr .String ()
273285 Log .Infof ("mac address: %s\n " , mac )
274286
275- // ifc_ctl interface up {Interface Name, Container ID, Domain ID, Bridge ID, MAC address, SE name}
276- if err := ifc_ctl .PgIfUp (if_local_name , "cont_" + endID [:8 ], domainid , bridgeID , mac , "gateway" ); err != nil {
277- Log .Error (err )
287+ cmdStr := "sudo /opt/pg/bin/ifc_ctl gateway add_port " + if_local_name
288+ Log .Infof ("addport cmd: %s" , cmdStr )
289+ cmd := exec .Command ("/bin/sh" , "-c" , cmdStr )
290+ var addport bytes.Buffer
291+ cmd .Stdout = & addport
292+ if err := cmd .Run (); err != nil {
293+ Log .Error ("Error thrown: " , err )
294+ }
295+ if addport .String () != "" {
296+ Log .Error (fmt .Errorf (addport .String ()))
297+ errorResponse (w , "Unable to on-board container onto PLUMgrid" )
298+ return
299+ }
300+
301+ cmdStr = "sudo /opt/pg/bin/ifc_ctl gateway ifup " + if_local_name + " access_container cont_" + endID [:8 ] + " " + mac + " pgtag2=" + bridgeID + " pgtag1=" + domainid
302+ Log .Infof ("ifup cmd: %s" , cmdStr )
303+ cmd = exec .Command ("/bin/sh" , "-c" , cmdStr )
304+ var ifup bytes.Buffer
305+ cmd .Stdout = & ifup
306+ if err := cmd .Run (); err != nil {
307+ Log .Error ("Error thrown: " , err )
308+ }
309+ if ifup .String () != "" {
310+ Log .Error (fmt .Errorf (ifup .String ()))
278311 errorResponse (w , "Unable to on-board container onto PLUMgrid" )
312+ return
279313 }
280314
281315 if netlink .LinkSetUp (local ) != nil {
282- errorResponse (w , ` unable to bring veth up` )
316+ errorResponse (w , " unable to bring veth up" )
283317 return
284318 }
285319
@@ -312,9 +346,30 @@ func (driver *driver) leaveEndpoint(w http.ResponseWriter, r *http.Request) {
312346
313347 if_local_name := "tap" + l .EndpointID [:5 ]
314348
315- // ifc_ctl interface down {Interface name, SE name}
316- if err := ifc_ctl .PgIfDown (if_local_name , "gateway" ); err != nil {
317- Log .Error (err )
349+ cmdStr := "sudo /opt/pg/bin/ifc_ctl gateway ifdown " + if_local_name
350+ Log .Infof ("ifdown cmd: %s" , cmdStr )
351+ cmd := exec .Command ("/bin/sh" , "-c" , cmdStr )
352+ var ifdown bytes.Buffer
353+ cmd .Stdout = & ifdown
354+ if err := cmd .Run (); err != nil {
355+ Log .Error ("Error thrown: " , err )
356+ }
357+ if ifdown .String () != "" {
358+ Log .Error (fmt .Errorf (ifdown .String ()))
359+ errorResponse (w , "Unable to off-board container from PLUMgrid" )
360+ }
361+
362+ cmdStr = "sudo /opt/pg/bin/ifc_ctl gateway del_port " + if_local_name
363+ Log .Infof ("delport cmd: %s" , cmdStr )
364+ cmd = exec .Command ("/bin/sh" , "-c" , cmdStr )
365+ var delport bytes.Buffer
366+ cmd .Stdout = & delport
367+ if err := cmd .Run (); err != nil {
368+ Log .Error ("Error thrown: " , err )
369+ }
370+ Log .Infof ("output: %+v\n " , delport .String ())
371+ if delport .String () != "" {
372+ Log .Error (fmt .Errorf (delport .String ()))
318373 errorResponse (w , "Unable to off-board container from PLUMgrid" )
319374 }
320375
0 commit comments