Skip to content

Commit ed727dc

Browse files
authored
Merge pull request #2357 from alexandear/refactor/pkg-first-usernet-index
Refactor limayaml.FirstUsernetIndex implementation and usages
2 parents 558da94 + 6f8e2b5 commit ed727dc

File tree

4 files changed

+41
-44
lines changed

4 files changed

+41
-44
lines changed

pkg/hostagent/hostagent.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -305,8 +305,7 @@ func (a *HostAgent) Run(ctx context.Context) error {
305305
}()
306306
adjustNofileRlimit()
307307

308-
firstUsernetIndex := limayaml.FirstUsernetIndex(a.y)
309-
if firstUsernetIndex == -1 && *a.y.HostResolver.Enabled {
308+
if limayaml.FirstUsernetIndex(a.y) == -1 && *a.y.HostResolver.Enabled {
310309
hosts := a.y.HostResolver.Hosts
311310
hosts["host.lima.internal"] = networks.SlirpGateway
312311
hosts[fmt.Sprintf("lima-%s", a.instName)] = networks.SlirpIPAddress

pkg/limayaml/defaults.go

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"os"
99
"path/filepath"
1010
"runtime"
11+
"slices"
1112
"strconv"
1213
"strings"
1314
"text/template"
@@ -90,14 +91,7 @@ func defaultContainerdArchives() []File {
9091

9192
// FirstUsernetIndex gets the index of first usernet network under l.Network[]. Returns -1 if no usernet network found
9293
func FirstUsernetIndex(l *LimaYAML) int {
93-
for i := range l.Networks {
94-
nwName := l.Networks[i].Lima
95-
isUsernet, _ := networks.Usernet(nwName)
96-
if isUsernet {
97-
return i
98-
}
99-
}
100-
return -1
94+
return slices.IndexFunc(l.Networks, func(network Network) bool { return networks.IsUsernet(network.Lima) })
10195
}
10296

10397
func MACAddress(uniqueID string) string {

pkg/networks/config.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -171,11 +171,16 @@ func Sock(name string) (string, error) {
171171
return cache.config.Sock(name), nil
172172
}
173173

174-
// Usernet Returns true if the given network name is usernet network
175-
func Usernet(name string) (bool, error) {
174+
// IsUsernet returns true if the given network name is a usernet network.
175+
// It return false if the cache cannot be loaded or the network is not defined.
176+
func IsUsernet(name string) bool {
176177
loadCache()
177178
if cache.err != nil {
178-
return false, cache.err
179+
return false
179180
}
180-
return cache.config.Usernet(name)
181+
isUsernet, err := cache.config.Usernet(name)
182+
if err != nil {
183+
return false
184+
}
185+
return isUsernet
181186
}

pkg/vz/vm_darwin.go

Lines changed: 29 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -124,37 +124,36 @@ func startVM(ctx context.Context, driver *driver.BaseDriver) (*virtualMachineWra
124124
}
125125

126126
func startUsernet(ctx context.Context, driver *driver.BaseDriver) (*usernet.Client, error) {
127-
firstUsernetIndex := limayaml.FirstUsernetIndex(driver.Yaml)
128-
if firstUsernetIndex == -1 {
129-
// Start a in-process gvisor-tap-vsock
130-
endpointSock, err := usernet.SockWithDirectory(driver.Instance.Dir, "", usernet.EndpointSock)
131-
if err != nil {
132-
return nil, err
133-
}
134-
vzSock, err := usernet.SockWithDirectory(driver.Instance.Dir, "", usernet.FDSock)
135-
if err != nil {
136-
return nil, err
137-
}
138-
os.RemoveAll(endpointSock)
139-
os.RemoveAll(vzSock)
140-
err = usernet.StartGVisorNetstack(ctx, &usernet.GVisorNetstackOpts{
141-
MTU: 1500,
142-
Endpoint: endpointSock,
143-
FdSocket: vzSock,
144-
Async: true,
145-
DefaultLeases: map[string]string{
146-
networks.SlirpIPAddress: limayaml.MACAddress(driver.Instance.Dir),
147-
},
148-
Subnet: networks.SlirpNetwork,
149-
})
150-
if err != nil {
151-
return nil, err
152-
}
153-
subnetIP, _, err := net.ParseCIDR(networks.SlirpNetwork)
154-
return usernet.NewClient(endpointSock, subnetIP), err
127+
if firstUsernetIndex := limayaml.FirstUsernetIndex(driver.Yaml); firstUsernetIndex != -1 {
128+
nwName := driver.Yaml.Networks[firstUsernetIndex].Lima
129+
return usernet.NewClientByName(nwName), nil
130+
}
131+
// Start a in-process gvisor-tap-vsock
132+
endpointSock, err := usernet.SockWithDirectory(driver.Instance.Dir, "", usernet.EndpointSock)
133+
if err != nil {
134+
return nil, err
135+
}
136+
vzSock, err := usernet.SockWithDirectory(driver.Instance.Dir, "", usernet.FDSock)
137+
if err != nil {
138+
return nil, err
139+
}
140+
os.RemoveAll(endpointSock)
141+
os.RemoveAll(vzSock)
142+
err = usernet.StartGVisorNetstack(ctx, &usernet.GVisorNetstackOpts{
143+
MTU: 1500,
144+
Endpoint: endpointSock,
145+
FdSocket: vzSock,
146+
Async: true,
147+
DefaultLeases: map[string]string{
148+
networks.SlirpIPAddress: limayaml.MACAddress(driver.Instance.Dir),
149+
},
150+
Subnet: networks.SlirpNetwork,
151+
})
152+
if err != nil {
153+
return nil, err
155154
}
156-
nwName := driver.Yaml.Networks[firstUsernetIndex].Lima
157-
return usernet.NewClientByName(nwName), nil
155+
subnetIP, _, err := net.ParseCIDR(networks.SlirpNetwork)
156+
return usernet.NewClient(endpointSock, subnetIP), err
158157
}
159158

160159
func createVM(driver *driver.BaseDriver) (*vz.VirtualMachine, error) {

0 commit comments

Comments
 (0)