Skip to content

Commit 5f4d187

Browse files
committed
Create unique MAC address for slirp interface as well
Signed-off-by: Jan Dubois <[email protected]>
1 parent 96e08d9 commit 5f4d187

File tree

4 files changed

+13
-11
lines changed

4 files changed

+13
-11
lines changed

pkg/cidata/cidata.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ func GenerateISO9660(instDir, name string, y *limayaml.LimaYAML) error {
7272
args.Mounts = append(args.Mounts, expanded)
7373
}
7474

75-
args.Networks = append(args.Networks, Network{MACAddress: qemuconst.SlirpMACAddress, Name: qemuconst.SlirpNICName})
75+
slirpMACAddress := limayaml.MACAddress(instDir)
76+
args.Networks = append(args.Networks, Network{MACAddress: slirpMACAddress, Name: qemuconst.SlirpNICName})
7677
for _, vde := range y.Network.VDE {
7778
args.Networks = append(args.Networks, Network{MACAddress: vde.MACAddress, Name: vde.Name})
7879
}

pkg/limayaml/defaults.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,15 @@ import (
1010
"github.com/AkihiroSuda/lima/pkg/guestagent/api"
1111
)
1212

13+
func MACAddress(uniqueID string) string {
14+
// TODO: combine the uniqueID with the host machineID to create a globally unique hash
15+
sha := sha256.Sum256([]byte(uniqueID))
16+
// According to https://gitlab.com/wireshark/wireshark/-/blob/master/manuf
17+
// no well-known MAC addresses start with 0x22.
18+
hw := append(net.HardwareAddr{0x22}, sha[0:5]...)
19+
return hw.String()
20+
}
21+
1322
func FillDefault(y *LimaYAML, filePath string) {
1423
y.Arch = resolveArch(y.Arch)
1524
for i := range y.Images {
@@ -62,12 +71,7 @@ func FillDefault(y *LimaYAML, filePath string) {
6271
vde := &y.Network.VDE[i]
6372
if vde.MACAddress == "" {
6473
// every interface in every limayaml file must get its own unique MAC address
65-
uniqueID := fmt.Sprintf("%s#%d", filePath, i)
66-
sha := sha256.Sum256([]byte(uniqueID))
67-
// According to https://gitlab.com/wireshark/wireshark/-/blob/master/manuf
68-
// no well-known MAC addresses start with 0x22.
69-
hw := append(net.HardwareAddr{0x22}, sha[0:5]...)
70-
vde.MACAddress = hw.String()
74+
vde.MACAddress = MACAddress(fmt.Sprintf("%s#%d", filePath, i))
7175
}
7276
if vde.Name == "" {
7377
vde.Name = "vde" + strconv.Itoa(i)

pkg/qemu/qemu.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import (
1212
"github.com/AkihiroSuda/lima/pkg/downloader"
1313
"github.com/AkihiroSuda/lima/pkg/iso9660util"
1414
"github.com/AkihiroSuda/lima/pkg/limayaml"
15-
"github.com/AkihiroSuda/lima/pkg/qemu/qemuconst"
1615
"github.com/AkihiroSuda/lima/pkg/store/filenames"
1716
"github.com/docker/go-units"
1817
"github.com/mattn/go-shellwords"
@@ -131,7 +130,6 @@ func appendArgsIfNoConflict(args []string, k, v string) []string {
131130
}
132131
return append(args, k, v)
133132
}
134-
135133
func Cmdline(cfg Config) (string, []string, error) {
136134
y := cfg.LimaYAML
137135
exe, args, err := getExe(y.Arch)
@@ -197,7 +195,7 @@ func Cmdline(cfg Config) (string, []string, error) {
197195
// Network
198196
// CIDR is intentionally hardcoded to 192.168.5.0/24, as each of QEMU has its own independent slirp network.
199197
args = append(args, "-netdev", fmt.Sprintf("user,id=net0,net=192.168.5.0/24,hostfwd=tcp:127.0.0.1:%d-:22", y.SSH.LocalPort))
200-
args = append(args, "-device", "virtio-net-pci,netdev=net0,mac="+qemuconst.SlirpMACAddress)
198+
args = append(args, "-device", "virtio-net-pci,netdev=net0,mac="+limayaml.MACAddress(cfg.InstanceDir))
201199
for i, vde := range y.Network.VDE {
202200
args = append(args, "-netdev", fmt.Sprintf("vde,id=net%d,sock=%s", i+1, vde.URL))
203201
args = append(args, "-device", fmt.Sprintf("virtio-net-pci,netdev=net%d,mac=%s", i+1, vde.MACAddress))

pkg/qemu/qemuconst/qemuconst.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package qemuconst
22

33
const (
4-
SlirpMACAddress = "22:11:11:11:11:11"
54
SlirpNICName = "eth0"
65
)

0 commit comments

Comments
 (0)