Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor limayaml.FirstUsernetIndex implementation and usages #2357

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions pkg/hostagent/hostagent.go
Original file line number Diff line number Diff line change
Expand Up @@ -305,8 +305,7 @@ func (a *HostAgent) Run(ctx context.Context) error {
}()
adjustNofileRlimit()

firstUsernetIndex := limayaml.FirstUsernetIndex(a.y)
if firstUsernetIndex == -1 && *a.y.HostResolver.Enabled {
if limayaml.FirstUsernetIndex(a.y) == -1 && *a.y.HostResolver.Enabled {
hosts := a.y.HostResolver.Hosts
hosts["host.lima.internal"] = networks.SlirpGateway
hosts[fmt.Sprintf("lima-%s", a.instName)] = networks.SlirpIPAddress
Expand Down
10 changes: 2 additions & 8 deletions pkg/limayaml/defaults.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"os"
"path/filepath"
"runtime"
"slices"
"strconv"
"strings"
"text/template"
Expand Down Expand Up @@ -90,14 +91,7 @@ func defaultContainerdArchives() []File {

// FirstUsernetIndex gets the index of first usernet network under l.Network[]. Returns -1 if no usernet network found
func FirstUsernetIndex(l *LimaYAML) int {
for i := range l.Networks {
nwName := l.Networks[i].Lima
isUsernet, _ := networks.Usernet(nwName)
if isUsernet {
return i
}
}
return -1
return slices.IndexFunc(l.Networks, func(network Network) bool { return networks.IsUsernet(network.Lima) })
}

func MACAddress(uniqueID string) string {
Expand Down
13 changes: 9 additions & 4 deletions pkg/networks/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -171,11 +171,16 @@ func Sock(name string) (string, error) {
return cache.config.Sock(name), nil
}

// Usernet Returns true if the given network name is usernet network
func Usernet(name string) (bool, error) {
// IsUsernet returns true if the given network name is a usernet network.
// It return false if the cache cannot be loaded or the network is not defined.
func IsUsernet(name string) bool {
loadCache()
if cache.err != nil {
return false, cache.err
return false
}
return cache.config.Usernet(name)
isUsernet, err := cache.config.Usernet(name)
if err != nil {
return false
}
return isUsernet
}
59 changes: 29 additions & 30 deletions pkg/vz/vm_darwin.go
Original file line number Diff line number Diff line change
Expand Up @@ -124,37 +124,36 @@ func startVM(ctx context.Context, driver *driver.BaseDriver) (*virtualMachineWra
}

func startUsernet(ctx context.Context, driver *driver.BaseDriver) (*usernet.Client, error) {
firstUsernetIndex := limayaml.FirstUsernetIndex(driver.Yaml)
if firstUsernetIndex == -1 {
// Start a in-process gvisor-tap-vsock
endpointSock, err := usernet.SockWithDirectory(driver.Instance.Dir, "", usernet.EndpointSock)
if err != nil {
return nil, err
}
vzSock, err := usernet.SockWithDirectory(driver.Instance.Dir, "", usernet.FDSock)
if err != nil {
return nil, err
}
os.RemoveAll(endpointSock)
os.RemoveAll(vzSock)
err = usernet.StartGVisorNetstack(ctx, &usernet.GVisorNetstackOpts{
MTU: 1500,
Endpoint: endpointSock,
FdSocket: vzSock,
Async: true,
DefaultLeases: map[string]string{
networks.SlirpIPAddress: limayaml.MACAddress(driver.Instance.Dir),
},
Subnet: networks.SlirpNetwork,
})
if err != nil {
return nil, err
}
subnetIP, _, err := net.ParseCIDR(networks.SlirpNetwork)
return usernet.NewClient(endpointSock, subnetIP), err
if firstUsernetIndex := limayaml.FirstUsernetIndex(driver.Yaml); firstUsernetIndex != -1 {
nwName := driver.Yaml.Networks[firstUsernetIndex].Lima
return usernet.NewClientByName(nwName), nil
}
// Start a in-process gvisor-tap-vsock
endpointSock, err := usernet.SockWithDirectory(driver.Instance.Dir, "", usernet.EndpointSock)
if err != nil {
return nil, err
}
vzSock, err := usernet.SockWithDirectory(driver.Instance.Dir, "", usernet.FDSock)
if err != nil {
return nil, err
}
os.RemoveAll(endpointSock)
os.RemoveAll(vzSock)
err = usernet.StartGVisorNetstack(ctx, &usernet.GVisorNetstackOpts{
MTU: 1500,
Endpoint: endpointSock,
FdSocket: vzSock,
Async: true,
DefaultLeases: map[string]string{
networks.SlirpIPAddress: limayaml.MACAddress(driver.Instance.Dir),
},
Subnet: networks.SlirpNetwork,
})
if err != nil {
return nil, err
}
nwName := driver.Yaml.Networks[firstUsernetIndex].Lima
return usernet.NewClientByName(nwName), nil
subnetIP, _, err := net.ParseCIDR(networks.SlirpNetwork)
return usernet.NewClient(endpointSock, subnetIP), err
}

func createVM(driver *driver.BaseDriver) (*vz.VirtualMachine, error) {
Expand Down
Loading