github.com/rootless-containers/rootlesskit/v2@v2.3.4/pkg/network/none/none.go (about) 1 package none 2 3 import ( 4 "context" 5 "os" 6 "os/exec" 7 "strconv" 8 "syscall" 9 10 "github.com/rootless-containers/rootlesskit/v2/pkg/api" 11 "github.com/rootless-containers/rootlesskit/v2/pkg/common" 12 "github.com/rootless-containers/rootlesskit/v2/pkg/messages" 13 "github.com/rootless-containers/rootlesskit/v2/pkg/network" 14 ) 15 16 func NewParentDriver() (network.ParentDriver, error) { 17 return &parentDriver{}, nil 18 } 19 20 type parentDriver struct { 21 } 22 23 const DriverName = "none" 24 25 func (d *parentDriver) MTU() int { 26 return 0 27 } 28 29 func (d *parentDriver) Info(ctx context.Context) (*api.NetworkDriverInfo, error) { 30 return &api.NetworkDriverInfo{ 31 Driver: DriverName, 32 }, nil 33 } 34 35 func (d *parentDriver) ConfigureNetwork(childPID int, stateDir, detachedNetNSPath string) (*messages.ParentInitNetworkDriverCompleted, func() error, error) { 36 var cleanups []func() error 37 38 if detachedNetNSPath != "" { 39 cmd := exec.Command("nsenter", "-t", strconv.Itoa(childPID), "-n"+detachedNetNSPath, "-m", "-U", "--no-fork", "--preserve-credentials", "sleep", "infinity") 40 cmd.SysProcAttr = &syscall.SysProcAttr{ 41 Pdeathsig: syscall.SIGKILL, 42 } 43 err := cmd.Start() 44 if err != nil { 45 return nil, nil, err 46 } 47 childPID = cmd.Process.Pid 48 } 49 50 cmds := [][]string{ 51 []string{"nsenter", "-t", strconv.Itoa(childPID), "-n", "-m", "-U", "--no-fork", "--preserve-credentials", "ip", "address", "add", "127.0.0.1/8", "dev", "lo"}, 52 []string{"nsenter", "-t", strconv.Itoa(childPID), "-n", "-m", "-U", "--no-fork", "--preserve-credentials", "ip", "link", "set", "lo", "up"}, 53 } 54 if err := common.Execs(os.Stderr, os.Environ(), cmds); err != nil { 55 return nil, nil, err 56 } 57 58 netmsg := messages.ParentInitNetworkDriverCompleted{} 59 return &netmsg, common.Seq(cleanups), nil 60 }