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
885 B
Go
Raw Normal View History

package libnetwork
import (
"fmt"
"os"
"os/exec"
"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 {
reexec.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: reexec.Self(),
Args: append([]string{reexecCommand.Key}, params...),
Stdout: os.Stdout,
Stderr: os.Stderr,
}
return cmd.Run()
}