Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
lima-vm
GitHub Repository: lima-vm/lima
Path: blob/master/cmd/limactl/usernet.go
1645 views
1
// SPDX-FileCopyrightText: Copyright The Lima Authors
2
// SPDX-License-Identifier: Apache-2.0
3
4
package main
5
6
import (
7
"errors"
8
"fmt"
9
"os"
10
"strconv"
11
12
"github.com/spf13/cobra"
13
14
"github.com/lima-vm/lima/v2/pkg/networks/usernet"
15
)
16
17
func newUsernetCommand() *cobra.Command {
18
hostagentCommand := &cobra.Command{
19
Use: "usernet",
20
Short: "Run usernet",
21
Args: cobra.ExactArgs(0),
22
RunE: usernetAction,
23
Hidden: true,
24
}
25
hostagentCommand.Flags().StringP("pidfile", "p", "", "Write PID to file")
26
hostagentCommand.Flags().StringP("endpoint", "e", "", "Exposes usernet API(s) on this endpoint")
27
hostagentCommand.Flags().String("listen-qemu", "", "Listen for QMEU connections")
28
hostagentCommand.Flags().String("listen", "", "Listen on a Unix socket and receive Bess-compatible FDs as SCM_RIGHTS messages")
29
hostagentCommand.Flags().String("subnet", "192.168.5.0/24", "Sets subnet value for the usernet network")
30
hostagentCommand.Flags().Int("mtu", 1500, "mtu")
31
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' ")
32
return hostagentCommand
33
}
34
35
func usernetAction(cmd *cobra.Command, _ []string) error {
36
pidfile, err := cmd.Flags().GetString("pidfile")
37
if err != nil {
38
return err
39
}
40
if pidfile != "" {
41
if _, err := os.Stat(pidfile); !errors.Is(err, os.ErrNotExist) {
42
return fmt.Errorf("pidfile %q already exists", pidfile)
43
}
44
if err := os.WriteFile(pidfile, []byte(strconv.Itoa(os.Getpid())+"\n"), 0o644); err != nil {
45
return err
46
}
47
defer os.RemoveAll(pidfile)
48
}
49
endpoint, err := cmd.Flags().GetString("endpoint")
50
if err != nil {
51
return err
52
}
53
qemuSocket, err := cmd.Flags().GetString("listen-qemu")
54
if err != nil {
55
return err
56
}
57
fdSocket, err := cmd.Flags().GetString("listen")
58
if err != nil {
59
return err
60
}
61
subnet, err := cmd.Flags().GetString("subnet")
62
if err != nil {
63
return err
64
}
65
66
leases, err := cmd.Flags().GetStringToString("leases")
67
if err != nil {
68
return err
69
}
70
71
mtu, err := cmd.Flags().GetInt("mtu")
72
if err != nil {
73
return err
74
}
75
76
os.RemoveAll(endpoint)
77
os.RemoveAll(qemuSocket)
78
os.RemoveAll(fdSocket)
79
80
// Environment Variables
81
// LIMA_USERNET_RESOLVE_IP_ADDRESS_TIMEOUT: Specifies the timeout duration for resolving IP addresses in minutes. Default is 2 minutes.
82
83
return usernet.StartGVisorNetstack(cmd.Context(), &usernet.GVisorNetstackOpts{
84
MTU: mtu,
85
Endpoint: endpoint,
86
QemuSocket: qemuSocket,
87
FdSocket: fdSocket,
88
Subnet: subnet,
89
DefaultLeases: leases,
90
})
91
}
92
93