Skip to content

Commit b345133

Browse files
committed
Support for configurable network address for user-v2
Signed-off-by: Balaji Vijayakumar <[email protected]>
1 parent 3a4a742 commit b345133

File tree

20 files changed

+583
-85
lines changed

20 files changed

+583
-85
lines changed

cmd/limactl/usernet.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ func newUsernetCommand() *cobra.Command {
2222
hostagentCommand.Flags().StringP("endpoint", "e", "", "exposes usernet api(s) on this endpoint")
2323
hostagentCommand.Flags().String("listen-qemu", "", "listen for qemu connections")
2424
hostagentCommand.Flags().String("listen", "", "listen on a Unix socket and receive Bess-compatible FDs as SCM_RIGHTS messages")
25+
hostagentCommand.Flags().String("subnet", "192.168.5.0/24", "sets subnet value for the usernet network")
2526
hostagentCommand.Flags().Int("mtu", 1500, "mtu")
2627
return hostagentCommand
2728
}
@@ -52,6 +53,10 @@ func usernetAction(cmd *cobra.Command, _ []string) error {
5253
if err != nil {
5354
return err
5455
}
56+
subnet, err := cmd.Flags().GetString("subnet")
57+
if err != nil {
58+
return err
59+
}
5560

5661
mtu, err := cmd.Flags().GetInt("mtu")
5762
if err != nil {
@@ -67,5 +72,6 @@ func usernetAction(cmd *cobra.Command, _ []string) error {
6772
Endpoint: endpoint,
6873
QemuSocket: qemuSocket,
6974
FdSocket: fdSocket,
75+
Subnet: subnet,
7076
})
7177
}

examples/experimental/net-user-v2.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@ images:
66
- location: "https://cloud-images.ubuntu.com/releases/22.04/release/ubuntu-22.04-server-cloudimg-arm64.img"
77
arch: "aarch64"
88

9+
hostResolver:
10+
# Marking enabled false will make use of system dns / inbuilt dns resolver of usernet for user-v2 network
11+
enabled: false
12+
hosts:
13+
host.docker.internal: host.lima.internal
914
mounts:
1015
- location: "~"
1116
- location: "/tmp/lima"

go.mod

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@ require (
66
github.com/AlecAivazis/survey/v2 v2.3.7
77
github.com/Code-Hex/vz/v3 v3.0.6
88
github.com/alessio/shellescape v1.4.1
9+
github.com/apparentlymart/go-cidr v1.1.0
910
github.com/balajiv113/fd v0.0.0-20230330094840-143eec500f3e
1011
github.com/cheggaaa/pb/v3 v3.1.2
1112
github.com/containerd/containerd v1.7.2
1213
github.com/containerd/continuity v0.4.1
13-
github.com/containers/gvisor-tap-vsock v0.6.1
14+
github.com/containers/gvisor-tap-vsock v0.6.2-0.20230615101539-7bc474d2c840
1415
github.com/coreos/go-semver v0.3.1
1516
github.com/cpuguy83/go-md2man/v2 v2.0.2
1617
github.com/cyphar/filepath-securejoin v0.2.3
@@ -37,7 +38,7 @@ require (
3738
github.com/sirupsen/logrus v1.9.3
3839
github.com/spf13/cobra v1.7.0
3940
github.com/xorcare/pointer v1.2.2
40-
golang.org/x/sync v0.2.0
41+
golang.org/x/sync v0.3.0
4142
golang.org/x/sys v0.9.0
4243
gopkg.in/op/go-logging.v1 v1.0.0-20160211212156-b2cb9fa56473
4344
gopkg.in/yaml.v3 v3.0.1
@@ -54,7 +55,6 @@ require (
5455
github.com/VividCortex/ewma v1.2.0 // indirect
5556
github.com/a8m/envsubst v1.4.2 // indirect
5657
github.com/alecthomas/participle/v2 v2.0.0 // indirect
57-
github.com/apparentlymart/go-cidr v1.1.0 // indirect
5858
github.com/davecgh/go-spew v1.1.1 // indirect
5959
github.com/digitalocean/go-libvirt v0.0.0-20220804181439-8648fbde413e // indirect
6060
github.com/dimchansky/utfbom v1.1.1 // indirect
@@ -88,8 +88,8 @@ require (
8888
github.com/mailru/easyjson v0.7.6 // indirect
8989
github.com/mattn/go-colorable v0.1.13 // indirect
9090
github.com/mattn/go-runewidth v0.0.12 // indirect
91-
github.com/mdlayher/socket v0.4.0 // indirect
92-
github.com/mdlayher/vsock v1.2.0 // indirect
91+
github.com/mdlayher/socket v0.4.1 // indirect
92+
github.com/mdlayher/vsock v1.2.1 // indirect
9393
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect
9494
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
9595
github.com/modern-go/reflect2 v1.0.2 // indirect
@@ -103,12 +103,12 @@ require (
103103
github.com/u-root/uio v0.0.0-20210528114334-82958018845c // indirect
104104
go.uber.org/atomic v1.7.0 // indirect
105105
go.uber.org/multierr v1.7.0 // indirect
106-
golang.org/x/crypto v0.9.0 // indirect
106+
golang.org/x/crypto v0.10.0 // indirect
107107
golang.org/x/mod v0.10.0 // indirect
108108
golang.org/x/net v0.10.0 // indirect
109109
golang.org/x/oauth2 v0.8.0 // indirect
110-
golang.org/x/term v0.8.0 // indirect
111-
golang.org/x/text v0.9.0 // indirect
110+
golang.org/x/term v0.9.0 // indirect
111+
golang.org/x/text v0.10.0 // indirect
112112
golang.org/x/time v0.3.0 // indirect
113113
golang.org/x/tools v0.9.1 // indirect
114114
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect

go.sum

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ github.com/containerd/containerd v1.7.2 h1:UF2gdONnxO8I6byZXDi5sXWiWvlW3D/sci7dT
3333
github.com/containerd/containerd v1.7.2/go.mod h1:afcz74+K10M/+cjGHIVQrCt3RAQhUSCAjJ9iMYhhkuI=
3434
github.com/containerd/continuity v0.4.1 h1:wQnVrjIyQ8vhU2sgOiL5T07jo+ouqc2bnKsv5/EqGhU=
3535
github.com/containerd/continuity v0.4.1/go.mod h1:F6PTNCKepoxEaXLQp3wDAjygEnImnZ/7o4JzpodfroQ=
36-
github.com/containers/gvisor-tap-vsock v0.6.1 h1:FaLOl4CE13Q8PgG89MfAaFx/B0AK/akHaR6pR2nvLUY=
37-
github.com/containers/gvisor-tap-vsock v0.6.1/go.mod h1:L6sgnuJhMaLT9dNi0fOEoloLQnaVgLXP5oEFTVvq8Dw=
36+
github.com/containers/gvisor-tap-vsock v0.6.2-0.20230615101539-7bc474d2c840 h1:Tn0cnI7gGTRDuOi9Y4y8cOqjS5CmKINI9VUVTUjO0Xw=
37+
github.com/containers/gvisor-tap-vsock v0.6.2-0.20230615101539-7bc474d2c840/go.mod h1:NtXJX69jW1R1htfQcPUQTINwT/iD74zp7NzUVXYempY=
3838
github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4=
3939
github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec=
4040
github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w=
@@ -211,10 +211,10 @@ github.com/mdlayher/netlink v1.1.1/go.mod h1:WTYpFb/WTvlRJAyKhZL5/uy69TDDpHHu2VZ
211211
github.com/mdlayher/raw v0.0.0-20190606142536-fef19f00fc18/go.mod h1:7EpbotpCmVZcu+KCX4g9WaRNuu11uyhiW7+Le1dKawg=
212212
github.com/mdlayher/raw v0.0.0-20191009151244-50f2db8cc065 h1:aFkJ6lx4FPip+S+Uw4aTegFMct9shDvP+79PsSxpm3w=
213213
github.com/mdlayher/raw v0.0.0-20191009151244-50f2db8cc065/go.mod h1:7EpbotpCmVZcu+KCX4g9WaRNuu11uyhiW7+Le1dKawg=
214-
github.com/mdlayher/socket v0.4.0 h1:280wsy40IC9M9q1uPGcLBwXpcTQDtoGwVt+BNoITxIw=
215-
github.com/mdlayher/socket v0.4.0/go.mod h1:xxFqz5GRCUN3UEOm9CZqEJsAbe1C8OwSK46NlmWuVoc=
216-
github.com/mdlayher/vsock v1.2.0 h1:klRY9lndjmg6k/QWbX/ucQ3e2JFRm1M7vfG9hijbQ0A=
217-
github.com/mdlayher/vsock v1.2.0/go.mod h1:w4kdSTQB9p1l/WwGmAs0V62qQ869qRYoongwgN+Y1HE=
214+
github.com/mdlayher/socket v0.4.1 h1:eM9y2/jlbs1M615oshPQOHZzj6R6wMT7bX5NPiQvn2U=
215+
github.com/mdlayher/socket v0.4.1/go.mod h1:cAqeGjoufqdxWkD7DkpyS+wcefOtmu5OQ8KuoJGIReA=
216+
github.com/mdlayher/vsock v1.2.1 h1:pC1mTJTvjo1r9n9fbm7S1j04rCgCzhCOS5DY0zqHlnQ=
217+
github.com/mdlayher/vsock v1.2.1/go.mod h1:NRfCibel++DgeMD8z/hP+PPTjlNJsdPOmxcnENvE+SE=
218218
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4=
219219
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
220220
github.com/miekg/dns v1.1.25/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso=
@@ -235,7 +235,7 @@ github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
235235
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
236236
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
237237
github.com/onsi/ginkgo/v2 v2.4.0 h1:+Ig9nvqgS5OBSACXNk15PLdp0U9XPYROt9CFzVdFGIs=
238-
github.com/onsi/gomega v1.27.4 h1:Z2AnStgsdSayCMDiCU42qIz+HLqEPcgiOCXjAU/w+8E=
238+
github.com/onsi/gomega v1.27.8 h1:gegWiwZjBsf2DgiSbf5hpokZ98JVDMcWkUiigk6/KXc=
239239
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
240240
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
241241
github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0=
@@ -280,7 +280,7 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
280280
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
281281
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
282282
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
283-
github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8=
283+
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
284284
github.com/u-root/uio v0.0.0-20210528114334-82958018845c h1:BFvcl34IGnw8yvJi8hlqLFo9EshRInwWBs2M5fGWzQA=
285285
github.com/u-root/uio v0.0.0-20210528114334-82958018845c/go.mod h1:LpEX5FO/cB+WF4TYGY1V5qktpaZLkKkSegbr0V4eYXA=
286286
github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
@@ -300,8 +300,8 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U
300300
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
301301
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
302302
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
303-
golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g=
304-
golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0=
303+
golang.org/x/crypto v0.10.0 h1:LKqV2xt9+kDzSTfOhx4FrkEBcMrAgHSYgzywV9zcGmM=
304+
golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I=
305305
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
306306
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
307307
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
@@ -346,8 +346,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ
346346
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
347347
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
348348
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
349-
golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI=
350-
golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
349+
golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E=
350+
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
351351
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
352352
golang.org/x/sys v0.0.0-20181021155630-eda9bb28ed51/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
353353
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -387,16 +387,16 @@ golang.org/x/sys v0.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s=
387387
golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
388388
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
389389
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
390-
golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols=
391-
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
390+
golang.org/x/term v0.9.0 h1:GRRCnKYhdQrD8kfRAdQ6Zcw1P0OcELxGLKJvtjVMZ28=
391+
golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo=
392392
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
393393
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
394394
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
395395
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
396396
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
397397
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
398-
golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE=
399-
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
398+
golang.org/x/text v0.10.0 h1:UpjohKhiEgNc0CSauXmwYftY1+LlaC75SJwh0SgCX58=
399+
golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
400400
golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
401401
golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
402402
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=

hack/test-example.sh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -327,10 +327,10 @@ if [[ -n ${CHECKS["user-v2"]} ]]; then
327327
INFO "Testing user-v2 network"
328328
secondvm="$NAME-1"
329329
"${LIMACTL_CREATE_AND_START[@]}" "$FILE" --name "$secondvm"
330-
guestNewip="$(limactl shell "$secondvm" ip -4 -j addr show dev eth0 | jq -r '.[0].addr_info[0].local')"
331-
INFO "IP of $secondvm is $guestNewip"
330+
secondvmDNS="lima-$secondvm.internal"
331+
INFO "DNS of $secondvm is $secondvmDNS"
332332
set -x
333-
if ! limactl shell "$NAME" ping -c 1 "$guestNewip"; then
333+
if ! limactl shell "$NAME" ping -c 1 "$secondvmDNS"; then
334334
ERROR "Failed to do vm->vm communication via user-v2"
335335
INFO "Stopping \"$secondvm\""
336336
limactl stop "$secondvm"

pkg/cidata/cidata.go

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import (
1212
"strings"
1313
"time"
1414

15+
"github.com/lima-vm/lima/pkg/networks/usernet"
16+
1517
"github.com/lima-vm/lima/pkg/networks"
1618

1719
"github.com/docker/go-units"
@@ -35,7 +37,7 @@ var netLookupIP = func(host string) []net.IP {
3537
return ips
3638
}
3739

38-
func setupEnv(y *limayaml.LimaYAML) (map[string]string, error) {
40+
func setupEnv(y *limayaml.LimaYAML, args TemplateArgs) (map[string]string, error) {
3941
// Start with the proxy variables from the system settings.
4042
env, err := osutil.ProxySettings()
4143
if err != nil {
@@ -74,7 +76,7 @@ func setupEnv(y *limayaml.LimaYAML) (map[string]string, error) {
7476

7577
for _, ip := range netLookupIP(u.Hostname()) {
7678
if ip.IsLoopback() {
77-
newHost := networks.SlirpGateway
79+
newHost := args.SlirpGateway
7880
if u.Port() != "" {
7981
newHost = net.JoinHostPort(newHost, u.Port())
8082
}
@@ -123,13 +125,35 @@ func GenerateISO9660(instDir, name string, y *limayaml.LimaYAML, udpDNSLocalPort
123125
UID: uid,
124126
Containerd: Containerd{System: *y.Containerd.System, User: *y.Containerd.User},
125127
SlirpNICName: networks.SlirpNICName,
126-
SlirpGateway: networks.SlirpGateway,
127-
SlirpDNS: networks.SlirpDNS,
128-
SlirpIPAddress: networks.SlirpIPAddress,
129128
RosettaEnabled: *y.Rosetta.Enabled,
130129
RosettaBinFmt: *y.Rosetta.BinFmt,
131130
}
132131

132+
firstUsernetIndex := limayaml.FirstUsernetIndex(y)
133+
var subnet net.IP
134+
135+
if firstUsernetIndex != -1 {
136+
usernetName := y.Networks[firstUsernetIndex].Lima
137+
subnet, err = usernet.Subnet(usernetName)
138+
if err != nil {
139+
return err
140+
}
141+
args.SlirpGateway = usernet.GatewayIP(subnet)
142+
args.SlirpDNS = usernet.GatewayIP(subnet)
143+
} else {
144+
subnet, err = usernet.ParseSubnet(networks.SlirpNetwork)
145+
if err != nil {
146+
return err
147+
}
148+
args.SlirpGateway = usernet.GatewayIP(subnet)
149+
if *y.VMType == limayaml.VZ {
150+
args.SlirpDNS = usernet.GatewayIP(subnet)
151+
} else {
152+
args.SlirpDNS = usernet.DNSIP(subnet)
153+
}
154+
args.SlirpIPAddress = networks.SlirpIPAddress
155+
}
156+
133157
// change instance id on every boot so network config will be processed again
134158
args.IID = fmt.Sprintf("iid-%d", time.Now().Unix())
135159

@@ -209,24 +233,24 @@ func GenerateISO9660(instDir, name string, y *limayaml.LimaYAML, udpDNSLocalPort
209233
})
210234
}
211235

212-
slirpMACAddress := limayaml.MACAddress(instDir)
213-
args.Networks = append(args.Networks, Network{MACAddress: slirpMACAddress, Interface: networks.SlirpNICName})
214-
firstUsernetIndex := limayaml.FirstUsernetIndex(y)
236+
args.Networks = append(args.Networks, Network{MACAddress: limayaml.MACAddress(instDir), Interface: networks.SlirpNICName})
215237
for i, nw := range y.Networks {
216238
if i == firstUsernetIndex {
217239
continue
218240
}
219241
args.Networks = append(args.Networks, Network{MACAddress: nw.MACAddress, Interface: nw.Interface})
220242
}
221243

222-
args.Env, err = setupEnv(y)
244+
args.Env, err = setupEnv(y, args)
223245
if err != nil {
224246
return err
225247
}
226248
if *y.HostResolver.Enabled {
227249
args.UDPDNSLocalPort = udpDNSLocalPort
228250
args.TCPDNSLocalPort = tcpDNSLocalPort
229-
args.DNSAddresses = append(args.DNSAddresses, networks.SlirpDNS)
251+
args.DNSAddresses = append(args.DNSAddresses, args.SlirpDNS)
252+
} else if firstUsernetIndex != -1 || *y.VMType == limayaml.VZ {
253+
args.DNSAddresses = append(args.DNSAddresses, args.SlirpDNS)
230254
} else if len(y.DNS) > 0 {
231255
for _, addr := range y.DNS {
232256
args.DNSAddresses = append(args.DNSAddresses, addr.String())

pkg/cidata/cidata_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ func TestSetupEnv(t *testing.T) {
4848
t.Run(httpProxy.Host, func(t *testing.T) {
4949
envKey := "http_proxy"
5050
envValue := httpProxy.String()
51-
envs, err := setupEnv(&limayaml.LimaYAML{PropagateProxyEnv: pointer.Bool(false), Env: map[string]string{envKey: envValue}})
51+
templateArgs := TemplateArgs{SlirpGateway: networks.SlirpGateway}
52+
envs, err := setupEnv(&limayaml.LimaYAML{PropagateProxyEnv: pointer.Bool(false), Env: map[string]string{envKey: envValue}}, templateArgs)
5253
assert.NilError(t, err)
5354
assert.Equal(t, envs[envKey], strings.ReplaceAll(envValue, httpProxy.Hostname(), networks.SlirpGateway))
5455
})
@@ -58,7 +59,8 @@ func TestSetupEnv(t *testing.T) {
5859
func TestSetupInvalidEnv(t *testing.T) {
5960
envKey := "http_proxy"
6061
envValue := "://localhost:8080"
61-
envs, err := setupEnv(&limayaml.LimaYAML{PropagateProxyEnv: pointer.Bool(false), Env: map[string]string{envKey: envValue}})
62+
templateArgs := TemplateArgs{SlirpGateway: networks.SlirpGateway}
63+
envs, err := setupEnv(&limayaml.LimaYAML{PropagateProxyEnv: pointer.Bool(false), Env: map[string]string{envKey: envValue}}, templateArgs)
6264
assert.NilError(t, err)
6365
assert.Equal(t, envs[envKey], envValue)
6466
}

pkg/cidata/template.go

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -50,19 +50,20 @@ type Disk struct {
5050
Device string
5151
}
5252
type TemplateArgs struct {
53-
Name string // instance name
54-
IID string // instance id
55-
User string // user name
56-
UID int
57-
SSHPubKeys []string
58-
Mounts []Mount
59-
MountType string
60-
Disks []Disk
61-
Containerd Containerd
62-
Networks []Network
63-
SlirpNICName string
64-
SlirpGateway string
65-
SlirpDNS string
53+
Name string // instance name
54+
IID string // instance id
55+
User string // user name
56+
UID int
57+
SSHPubKeys []string
58+
Mounts []Mount
59+
MountType string
60+
Disks []Disk
61+
Containerd Containerd
62+
Networks []Network
63+
SlirpNICName string
64+
SlirpGateway string
65+
SlirpDNS string
66+
//Deprecated
6667
SlirpIPAddress string
6768
UDPDNSLocalPort int
6869
TCPDNSLocalPort int

pkg/networks/config_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ func TestFillDefault(t *testing.T) {
1515
userNet := newYaml.Networks[ModeUserV2]
1616
assert.Equal(t, userNet.Mode, ModeUserV2)
1717
assert.Equal(t, userNet.Interface, "")
18-
assert.DeepEqual(t, userNet.NetMask, net.IP{})
19-
assert.DeepEqual(t, userNet.Gateway, net.IP{})
18+
assert.DeepEqual(t, userNet.NetMask, net.ParseIP("255.255.255.0"))
19+
assert.DeepEqual(t, userNet.Gateway, net.ParseIP("192.168.104.1"))
2020
assert.DeepEqual(t, userNet.DHCPEnd, net.IP{})
2121
}

pkg/networks/const.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,5 @@ const (
55
// CIDR is intentionally hardcoded to 192.168.5.0/24, as each of QEMU has its own independent slirp network.
66
SlirpNetwork = "192.168.5.0/24"
77
SlirpGateway = "192.168.5.2"
8-
SlirpDNS = "192.168.5.3"
98
SlirpIPAddress = "192.168.5.15"
109
)

pkg/networks/networks.TEMPLATE.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ group: everyone
2424
networks:
2525
user-v2:
2626
mode: user-v2
27+
gateway: 192.168.104.1
28+
netmask: 255.255.255.0
2729
# user-v2 network is experimental network mode which supports all functionalities of default usernet network and also allows vm -> vm communication.
2830
# Doesn't support configuration of custom gateway; hardcoded to 192.168.5.0/24
2931
shared:

0 commit comments

Comments
 (0)