1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00
moby--moby/libnetwork/reexec.go

46 lines
883 B
Go
Raw Normal View History

package libnetwork
import (
"fmt"
"os"
"os/exec"
dre "github.com/docker/docker/pkg/reexec"
)
type reexecCommand int
const (
reexecCreateNamespace reexecCommand = iota
reexecMoveInterface
)
var reexecCommands = map[reexecCommand]struct {
Key string
Entrypoint func()
}{
reexecCreateNamespace: {"netns-create", createNetworkNamespace},
reexecMoveInterface: {"netns-moveif", namespaceMoveInterface},
}
func init() {
for _, reexecCmd := range reexecCommands {
dre.Register(reexecCmd.Key, reexecCmd.Entrypoint)
}
}
func reexec(command reexecCommand, params ...string) error {
reexecCommand, ok := reexecCommands[command]
if !ok {
return fmt.Errorf("unknown reexec command %q", command)
}
cmd := &exec.Cmd{
Path: dre.Self(),
Args: append([]string{reexecCommand.Key}, params...),
Stdout: os.Stdout,
Stderr: os.Stderr,
}
return cmd.Run()
}