Skip to content

Commit

Permalink
Merge pull request #2357 from alexandear/refactor/pkg-first-usernet-i…
Browse files Browse the repository at this point in the history
…ndex

Refactor limayaml.FirstUsernetIndex implementation and usages
  • Loading branch information
jandubois committed May 24, 2024
2 parents 558da94 + 6f8e2b5 commit ed727dc
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 44 deletions.
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

0 comments on commit ed727dc

Please sign in to comment.