Skip to content

Commit dca514c

Browse files
authored
add optional bridge ip (nanovms#1567)
1 parent 96178df commit dca514c

6 files changed

+48
-26
lines changed

cmd/flags_run_local_instance.go

+28-17
Original file line numberDiff line numberDiff line change
@@ -19,23 +19,24 @@ import (
1919

2020
// RunLocalInstanceCommandFlags consolidates all command flags required to run a local instance in one struct
2121
type RunLocalInstanceCommandFlags struct {
22-
Accel bool
23-
Bridged bool
24-
BridgeName string
25-
Debug bool
26-
Force bool
27-
GDBPort int
28-
MissingFiles bool
29-
NoTrace []string
30-
Ports []string
31-
SkipBuild bool
32-
Memory string
33-
Smp int
34-
SyscallSummary bool
35-
TapName string
36-
Trace bool
37-
Verbose bool
38-
Arch string
22+
Accel bool
23+
Bridged bool
24+
BridgeName string
25+
BridgeIPAddress string
26+
Debug bool
27+
Force bool
28+
GDBPort int
29+
MissingFiles bool
30+
NoTrace []string
31+
Ports []string
32+
SkipBuild bool
33+
Memory string
34+
Smp int
35+
SyscallSummary bool
36+
TapName string
37+
Trace bool
38+
Verbose bool
39+
Arch string
3940
}
4041

4142
// MergeToConfig overrides configuration passed by argument with command flags values
@@ -100,6 +101,10 @@ func (flags *RunLocalInstanceCommandFlags) MergeToConfig(c *types.Config) error
100101
c.RunConfig.BridgeName = flags.BridgeName
101102
}
102103

104+
if flags.BridgeIPAddress != "" {
105+
c.RunConfig.BridgeIPAddress = flags.BridgeIPAddress
106+
}
107+
103108
if len(flags.NoTrace) > 0 {
104109
c.NoTrace = flags.NoTrace
105110
}
@@ -236,6 +241,11 @@ func NewRunLocalInstanceCommandFlags(cmdFlags *pflag.FlagSet) (flags *RunLocalIn
236241
exitWithError(err.Error())
237242
}
238243

244+
flags.BridgeIPAddress, err = cmdFlags.GetString("bridgeipaddress")
245+
if err != nil {
246+
exitWithError(err.Error())
247+
}
248+
239249
flags.Trace, err = cmdFlags.GetBool("trace")
240250
if err != nil {
241251
exitWithError(err.Error())
@@ -260,6 +270,7 @@ func PersistRunLocalInstanceCommandFlags(cmdFlags *pflag.FlagSet) {
260270
cmdFlags.BoolP("verbose", "v", false, "verbose")
261271
cmdFlags.BoolP("bridged", "b", false, "bridge networking")
262272
cmdFlags.StringP("bridgename", "", "", "bridge name")
273+
cmdFlags.StringP("bridgeipaddress", "", "", "bridge ip address")
263274
cmdFlags.StringP("tapname", "t", "", "tap device name")
264275
cmdFlags.BoolP("skipbuild", "s", false, "skip building image")
265276
cmdFlags.Bool("accel", true, "use cpu virtualization extension")

cmd/run_local_instance.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ func RunLocalInstance(c *types.Config) (err error) {
2929
tapDeviceName := c.RunConfig.TapName
3030
bridged := c.RunConfig.Bridged
3131
ipaddress := c.RunConfig.IPAddress
32+
bridgeipaddress := c.RunConfig.BridgeIPAddress
3233
netmask := c.RunConfig.NetMask
3334

3435
bridgeName := c.RunConfig.BridgeName
@@ -39,7 +40,7 @@ func RunLocalInstance(c *types.Config) (err error) {
3940
networkService := network.NewIprouteNetworkService()
4041

4142
if tapDeviceName != "" {
42-
err = network.SetupNetworkInterfaces(networkService, tapDeviceName, bridgeName, ipaddress, netmask)
43+
err = network.SetupNetworkInterfaces(networkService, tapDeviceName, bridgeName, ipaddress, netmask, bridgeipaddress)
4344
if err != nil {
4445
return
4546
}

network/setup_network_interfaces.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ type Service interface {
2626
}
2727

2828
// SetupNetworkInterfaces changes network configuration to support requirements
29-
func SetupNetworkInterfaces(network Service, tapDeviceName string, bridgeName string, ipaddress string, netmask string) error {
29+
func SetupNetworkInterfaces(network Service, tapDeviceName string, bridgeName string, ipaddress string, netmask string, bridgeipaddress string) error {
3030

3131
tapExists, err := network.CheckNetworkInterfaceExists(tapDeviceName)
3232
if err != nil {
@@ -55,9 +55,14 @@ func SetupNetworkInterfaces(network Service, tapDeviceName string, bridgeName st
5555
}
5656

5757
if ipaddress != "" {
58+
5859
ip := net.ParseIP(ipaddress).To4()
60+
5961
ip[3] = byte(66) // 66 is a random IP
6062
bridgeIP := ip.String()
63+
if bridgeipaddress != "" {
64+
bridgeIP = net.ParseIP(bridgeipaddress).To4().String()
65+
}
6166

6267
currentBridgeIP, err := network.GetNetworkInterfaceIP(bridgeName)
6368
if err != nil {

network/setup_network_interfaces_test.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ func TestSetupNetworkInterfaces(t *testing.T) {
3434
TurnNIUp(tapDeviceName).
3535
Return("success", nil)
3636

37-
network.SetupNetworkInterfaces(networkService, tapDeviceName, "", "", "")
37+
network.SetupNetworkInterfaces(networkService, tapDeviceName, "", "", "", "")
3838
})
3939

4040
t.Run("should not create tap or turn it on if it already exists and is active", func(t *testing.T) {
@@ -51,7 +51,7 @@ func TestSetupNetworkInterfaces(t *testing.T) {
5151
IsNIUp(tapDeviceName).
5252
Return(true, nil)
5353

54-
network.SetupNetworkInterfaces(networkService, tapDeviceName, "", "", "")
54+
network.SetupNetworkInterfaces(networkService, tapDeviceName, "", "", "", "")
5555
})
5656

5757
t.Run("should turn the tap up if it exists and is not active", func(t *testing.T) {
@@ -73,7 +73,7 @@ func TestSetupNetworkInterfaces(t *testing.T) {
7373
TurnNIUp(tapDeviceName).
7474
Return("success", nil)
7575

76-
network.SetupNetworkInterfaces(networkService, tapDeviceName, "", "", "")
76+
network.SetupNetworkInterfaces(networkService, tapDeviceName, "", "", "", "")
7777
})
7878

7979
t.Run("should create bridge and turn it up if it does not exist and add tap to bridge network", func(t *testing.T) {
@@ -121,7 +121,7 @@ func TestSetupNetworkInterfaces(t *testing.T) {
121121
IsNIUp(tapDeviceName).
122122
Return(true, nil)
123123

124-
network.SetupNetworkInterfaces(networkService, tapDeviceName, bridgeName, "", "")
124+
network.SetupNetworkInterfaces(networkService, tapDeviceName, bridgeName, "", "", "")
125125
})
126126

127127
t.Run("should set IP in bridge if it already exists", func(t *testing.T) {
@@ -169,7 +169,7 @@ func TestSetupNetworkInterfaces(t *testing.T) {
169169
IsNIUp(tapDeviceName).
170170
Return(true, nil)
171171

172-
network.SetupNetworkInterfaces(networkService, tapDeviceName, bridgeName, "192.168.1.100", "255.255.255.0")
172+
network.SetupNetworkInterfaces(networkService, tapDeviceName, bridgeName, "192.168.1.100", "255.255.255.0", "")
173173
})
174174

175175
t.Run("should not set IP in bridge if it is already set", func(t *testing.T) {
@@ -207,7 +207,7 @@ func TestSetupNetworkInterfaces(t *testing.T) {
207207
IsNIUp(tapDeviceName).
208208
Return(true, nil)
209209

210-
network.SetupNetworkInterfaces(networkService, tapDeviceName, bridgeName, "192.168.1.100", "255.255.255.0")
210+
network.SetupNetworkInterfaces(networkService, tapDeviceName, bridgeName, "192.168.1.100", "255.255.255.0", "")
211211
})
212212

213213
}

provider/onprem/onprem_instance.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ func (p *OnPrem) createInstance(ctx *lepton.Context) (string, error) {
6262
bridged := c.RunConfig.Bridged
6363
ipaddress := c.RunConfig.IPAddress
6464
netmask := c.RunConfig.NetMask
65+
bridgeipaddress := c.RunConfig.BridgeIPAddress
6566

6667
bridgeName := c.RunConfig.BridgeName
6768
if bridged && bridgeName == "" {
@@ -71,7 +72,7 @@ func (p *OnPrem) createInstance(ctx *lepton.Context) (string, error) {
7172
networkService := network.NewIprouteNetworkService()
7273

7374
if tapDeviceName != "" {
74-
err := network.SetupNetworkInterfaces(networkService, tapDeviceName, bridgeName, ipaddress, netmask)
75+
err := network.SetupNetworkInterfaces(networkService, tapDeviceName, bridgeName, ipaddress, netmask, bridgeipaddress)
7576
if err != nil {
7677
return "", err
7778
}

types/config.go

+4
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,10 @@ type RunConfig struct {
291291
// in use. This also enables KVM acceleration.
292292
Bridged bool `json:",omitempty"`
293293

294+
// BridgeIPAddress is an optional ip address for a bridge when used
295+
// w/ops run.
296+
BridgeIPAddress string `json:",omitempty"`
297+
294298
// BridgeName
295299
BridgeName string `json:",omitempty"`
296300

0 commit comments

Comments
 (0)