|
15 | 15 | package driver |
16 | 16 |
|
17 | 17 | import ( |
| 18 | + "bytes" |
18 | 19 | "encoding/hex" |
19 | 20 | "encoding/json" |
20 | 21 | "fmt" |
21 | 22 | "io" |
22 | 23 | "net" |
23 | 24 | "net/http" |
| 25 | + "os/exec" |
24 | 26 |
|
25 | 27 | Log "github.com/Sirupsen/logrus" |
26 | 28 | "github.com/docker/libnetwork/drivers/remote/api" |
27 | 29 | "github.com/docker/libnetwork/netlabel" |
28 | 30 | docker "github.com/fsouza/go-dockerclient" |
29 | | - "github.com/plumgrid/cli/helpers/plumgrid/ifc_ctl" |
30 | 31 |
|
31 | 32 | "github.com/gorilla/mux" |
32 | 33 | "github.com/vishvananda/netlink" |
@@ -212,7 +213,7 @@ func (driver *driver) createEndpoint(w http.ResponseWriter, r *http.Request) { |
212 | 213 | local := vethPair(endID[:5]) |
213 | 214 | if err := netlink.LinkAdd(local); err != nil { |
214 | 215 | Log.Error(err) |
215 | | - errorResponse(w, "could not create veth pair") |
| 216 | + errorResponsef(w, "could not create veth pair") |
216 | 217 | return |
217 | 218 | } |
218 | 219 | link, _ := netlink.LinkByName(local.PeerName) |
@@ -283,15 +284,36 @@ func (driver *driver) joinEndpoint(w http.ResponseWriter, r *http.Request) { |
283 | 284 | mac := link.Attrs().HardwareAddr.String() |
284 | 285 | Log.Infof("mac address: %s\n", mac) |
285 | 286 |
|
286 | | - // ifc_ctl interface up {Interface Name, Container ID, Domain ID, Bridge ID, MAC address, SE name} |
287 | | - if err := ifc_ctl.PgIfUp(if_local_name, "cont_"+endID[:8], domainid, bridgeID, mac, "gateway"); err != nil { |
288 | | - 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())) |
289 | 311 | errorResponse(w, "Unable to on-board container onto PLUMgrid") |
290 | 312 | return |
291 | 313 | } |
292 | 314 |
|
293 | 315 | if netlink.LinkSetUp(local) != nil { |
294 | | - errorResponse(w, `unable to bring veth up`) |
| 316 | + errorResponsef(w, `unable to bring veth up`) |
295 | 317 | return |
296 | 318 | } |
297 | 319 |
|
@@ -324,11 +346,31 @@ func (driver *driver) leaveEndpoint(w http.ResponseWriter, r *http.Request) { |
324 | 346 |
|
325 | 347 | if_local_name := "tap" + l.EndpointID[:5] |
326 | 348 |
|
327 | | - // ifc_ctl interface down {Interface name, SE name} |
328 | | - if err := ifc_ctl.PgIfDown(if_local_name, "gateway"); err != nil { |
329 | | - 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())) |
330 | 373 | errorResponse(w, "Unable to off-board container from PLUMgrid") |
331 | | - return |
332 | 374 | } |
333 | 375 |
|
334 | 376 | RemoveMetaconfig(domainid, bridgeID, l.EndpointID) |
|
0 commit comments