Skip to content

Commit c1261ad

Browse files
committed
fix: fix creating bridged network interface
1 parent 02c4637 commit c1261ad

File tree

1 file changed

+21
-22
lines changed

1 file changed

+21
-22
lines changed

cmd/limactl/network.go

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -174,42 +174,41 @@ func networkCreateAction(cmd *cobra.Command, args []string) error {
174174
return err
175175
}
176176

177-
switch mode {
178-
case networks.ModeBridged:
177+
if mode == networks.ModeBridged {
179178
if gateway != "" {
180179
return fmt.Errorf("network mode %q does not support specifying gateway", mode)
181180
}
182181
if intf == "" {
183182
return fmt.Errorf("network mode %q requires specifying interface", mode)
184183
}
185-
default:
184+
yq := fmt.Sprintf(`.networks.%q = {"mode":%q,"interface":%q}`, name, mode, intf)
185+
return networkApplyYQ(yq)
186+
} else {
186187
if gateway == "" {
187188
return fmt.Errorf("network mode %q requires specifying gateway", mode)
188189
}
189190
if intf != "" {
190191
return fmt.Errorf("network mode %q does not support specifying interface", mode)
191192
}
192-
}
193+
if !strings.Contains(gateway, "/") {
194+
gateway += "/24"
195+
}
196+
gwIP, gwMask, err := net.ParseCIDR(gateway)
197+
if err != nil {
198+
return fmt.Errorf("failed to parse CIDR %q: %w", gateway, err)
199+
}
200+
if gwIP.IsUnspecified() || gwIP.IsLoopback() {
201+
return fmt.Errorf("invalid IP address: %v", gwIP)
202+
}
203+
gwMaskStr := "255.255.255.0"
204+
if gwMask != nil {
205+
gwMaskStr = net.IP(gwMask.Mask).String()
206+
}
207+
// TODO: check IP range collision
193208

194-
if !strings.Contains(gateway, "/") {
195-
gateway += "/24"
209+
yq := fmt.Sprintf(`.networks.%q = {"mode":%q,"gateway":%q,"netmask":%q,"interface":%q}`, name, mode, gwIP.String(), gwMaskStr, intf)
210+
return networkApplyYQ(yq)
196211
}
197-
gwIP, gwMask, err := net.ParseCIDR(gateway)
198-
if err != nil {
199-
return fmt.Errorf("failed to parse CIDR %q: %w", gateway, err)
200-
}
201-
if gwIP.IsUnspecified() || gwIP.IsLoopback() {
202-
return fmt.Errorf("invalid IP address: %v", gwIP)
203-
}
204-
gwMaskStr := "255.255.255.0"
205-
if gwMask != nil {
206-
gwMaskStr = net.IP(gwMask.Mask).String()
207-
}
208-
// TODO: check IP range collision
209-
210-
yq := fmt.Sprintf(`.networks.%q = {"mode":%q,"gateway":%q,"netmask":%q,"interface":%q}`, name, mode, gwIP.String(), gwMaskStr, intf)
211-
212-
return networkApplyYQ(yq)
213212
}
214213

215214
func networkApplyYQ(yq string) error {

0 commit comments

Comments
 (0)