// called from the libcontainer pre-start hook to set the network // namespace configuration linkage to the libnetwork "sandbox" entity func (daemon *Daemon) setNetworkNamespaceKey(containerID string, pid int) error { path := fmt.Sprintf("/proc/%d/ns/net", pid) var sandbox libnetwork.Sandbox search := libnetwork.SandboxContainerWalker(&sandbox, containerID) daemon.netController.WalkSandboxes(search) if sandbox == nil { return derr.ErrorCodeNoSandbox.WithArgs(containerID, "no sandbox found") } return sandbox.SetKey(path) }
// called from the libcontainer pre-start hook to set the network // namespace configuration linkage to the libnetwork "sandbox" entity func (container *Container) setNetworkNamespaceKey(pid int) error { path := fmt.Sprintf("/proc/%d/ns/net", pid) var sandbox libnetwork.Sandbox search := libnetwork.SandboxContainerWalker(&sandbox, container.ID) container.daemon.netController.WalkSandboxes(search) if sandbox == nil { return fmt.Errorf("no sandbox present for %s", container.ID) } return sandbox.SetKey(path) }
// called from the libcontainer pre-start hook to set the network // namespace configuration linkage to the libnetwork "sandbox" entity func (daemon *Daemon) setNetworkNamespaceKey(containerID string, pid int) error { path := fmt.Sprintf("/proc/%d/ns/net", pid) var sandbox libnetwork.Sandbox search := libnetwork.SandboxContainerWalker(&sandbox, containerID) daemon.netController.WalkSandboxes(search) if sandbox == nil { return fmt.Errorf("error locating sandbox id %s: no sandbox found", containerID) } return sandbox.SetKey(path) }
func runParallelTests(t *testing.T, thrNumber int) { var ( ep libnetwork.Endpoint sb libnetwork.Sandbox err error ) t.Parallel() pTest := flag.Lookup("test.parallel") if pTest == nil { t.Skip("Skipped because test.parallel flag not set;") } numParallel, err := strconv.Atoi(pTest.Value.String()) if err != nil { t.Fatal(err) } if numParallel < numThreads { t.Skip("Skipped because t.parallel was less than ", numThreads) } runtime.LockOSThread() defer runtime.UnlockOSThread() if thrNumber == first { createGlobalInstance(t) } if thrNumber != first { select { case <-start: } thrdone := make(chan struct{}) done <- thrdone defer close(thrdone) if thrNumber == last { defer close(done) } err = netns.Set(testns) if err != nil { t.Fatal(err) } } defer netns.Set(origns) net1, err := controller.NetworkByName("testhost") if err != nil { t.Fatal(err) } if net1 == nil { t.Fatal("Could not find testhost") } net2, err := controller.NetworkByName("network2") if err != nil { t.Fatal(err) } if net2 == nil { t.Fatal("Could not find network2") } epName := fmt.Sprintf("pep%d", thrNumber) if thrNumber == first { ep, err = net1.EndpointByName(epName) } else { ep, err = net2.EndpointByName(epName) } if err != nil { t.Fatal(err) } if ep == nil { t.Fatal("Got nil ep with no error") } cid := fmt.Sprintf("%drace", thrNumber) controller.WalkSandboxes(libnetwork.SandboxContainerWalker(&sb, cid)) if sb == nil { t.Fatalf("Got nil sandbox for container: %s", cid) } for i := 0; i < iterCnt; i++ { parallelJoin(t, sb, ep, thrNumber) parallelLeave(t, sb, ep, thrNumber) } debugf("\n") err = ep.Delete() if err != nil { t.Fatal(err) } if thrNumber == first { for thrdone := range done { select { case <-thrdone: } } testns.Close() err = sb.Delete() if err != nil { t.Fatal(err) } ep.Delete() if err != nil { t.Fatal(err) } if err := net2.Delete(); err != nil { t.Fatal(err) } } }