-
Notifications
You must be signed in to change notification settings - Fork 653
/
Copy pathusernet.go
94 lines (85 loc) · 2.66 KB
/
usernet.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package main
import (
"errors"
"fmt"
"os"
"strconv"
"github.com/lima-vm/lima/pkg/networks/usernet"
"github.com/spf13/cobra"
)
func newUsernetCommand() *cobra.Command {
hostagentCommand := &cobra.Command{
Use: "usernet",
Short: "run usernet",
Args: cobra.ExactArgs(0),
RunE: usernetAction,
Hidden: true,
}
hostagentCommand.Flags().StringP("pidfile", "p", "", "write pid to file")
hostagentCommand.Flags().StringP("endpoint", "e", "", "exposes usernet api(s) on this endpoint")
hostagentCommand.Flags().String("listen-qemu", "", "listen for qemu connections")
hostagentCommand.Flags().String("listen", "", "listen on a Unix socket and receive Bess-compatible FDs as SCM_RIGHTS messages")
hostagentCommand.Flags().String("listen-socks", "", "listen for socks connectioss")
hostagentCommand.Flags().String("subnet", "192.168.5.0/24", "sets subnet value for the usernet network")
hostagentCommand.Flags().Int("mtu", 1500, "mtu")
hostagentCommand.Flags().StringToString("leases", nil, "pass default static leases for startup. Eg: '192.168.104.1=52:55:55:b3:bc:d9,192.168.104.2=5a:94:ef:e4:0c:df' ")
return hostagentCommand
}
func usernetAction(cmd *cobra.Command, _ []string) error {
pidfile, err := cmd.Flags().GetString("pidfile")
if err != nil {
return err
}
if pidfile != "" {
if _, err := os.Stat(pidfile); !errors.Is(err, os.ErrNotExist) {
return fmt.Errorf("pidfile %q already exists", pidfile)
}
if err := os.WriteFile(pidfile, []byte(strconv.Itoa(os.Getpid())+"\n"), 0o644); err != nil {
return err
}
defer os.RemoveAll(pidfile)
}
endpoint, err := cmd.Flags().GetString("endpoint")
if err != nil {
return err
}
qemuSocket, err := cmd.Flags().GetString("listen-qemu")
if err != nil {
return err
}
fdSocket, err := cmd.Flags().GetString("listen")
if err != nil {
return err
}
socksSocket, err := cmd.Flags().GetString("listen-socks")
if err != nil {
return err
}
subnet, err := cmd.Flags().GetString("subnet")
if err != nil {
return err
}
leases, err := cmd.Flags().GetStringToString("leases")
if err != nil {
return err
}
mtu, err := cmd.Flags().GetInt("mtu")
if err != nil {
return err
}
os.RemoveAll(endpoint)
os.RemoveAll(qemuSocket)
os.RemoveAll(fdSocket)
os.RemoveAll(socksSocket)
// Environment Variables
// LIMA_USERNET_RESOLVE_IP_ADDRESS_TIMEOUT: Specifies the timeout duration for resolving IP addresses in minutes. Default is 2 minutes.
return usernet.StartGVisorNetstack(cmd.Context(), &usernet.GVisorNetstackOpts{
MTU: mtu,
Endpoint: endpoint,
QemuSocket: qemuSocket,
FdSocket: fdSocket,
SocksSocket: socksSocket,
Subnet: subnet,
DefaultLeases: leases,
})
}