Skip to content

Commit 19e7990

Browse files
authored
Merge pull request moby#49866 from robmry/drop_enable_ipv_opt_if_overridden
Drop "-o com.docker.network.enable_ipv[46]" if overridden
2 parents 82fc83e + 37725b5 commit 19e7990

File tree

2 files changed

+61
-0
lines changed

2 files changed

+61
-0
lines changed

daemon/network.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,9 @@ func (daemon *Daemon) createNetwork(ctx context.Context, cfg *config.Config, cre
318318
enableIPv4 := true
319319
if create.EnableIPv4 != nil {
320320
enableIPv4 = *create.EnableIPv4
321+
// Make sure there's no conflicting DefaultNetworkOpts value (it'd be ignored but
322+
// would look wrong in inspect output).
323+
delete(networkOptions, netlabel.EnableIPv4)
321324
} else if v, ok := networkOptions[netlabel.EnableIPv4]; ok {
322325
var err error
323326
if enableIPv4, err = strconv.ParseBool(v); err != nil {
@@ -328,6 +331,9 @@ func (daemon *Daemon) createNetwork(ctx context.Context, cfg *config.Config, cre
328331
var enableIPv6 bool
329332
if create.EnableIPv6 != nil {
330333
enableIPv6 = *create.EnableIPv6
334+
// Make sure there's no conflicting DefaultNetworkOpts value (it'd be ignored but
335+
// would look wrong in inspect output).
336+
delete(networkOptions, netlabel.EnableIPv6)
331337
} else if v, ok := networkOptions[netlabel.EnableIPv6]; ok {
332338
var err error
333339
if enableIPv6, err = strconv.ParseBool(v); err != nil {

integration/network/bridge/bridge_linux_test.go

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,61 @@ func TestCreateWithIPv6WithoutEnableIPv6Flag(t *testing.T) {
104104
t.Fatalf("Network %s has no ULA prefix, expected one.", nwName)
105105
}
106106

107+
// TestDefaultIPvOptOverride checks that when default-network-opts set enable_ipv4 or
108+
// enable_ipv6, and those values are overridden for a network, the default option
109+
// values don't show up in network inspect output. (Because it's confusing if the
110+
// default shows up when it's been overridden with a different value.)
111+
func TestDefaultIPvOptOverride(t *testing.T) {
112+
ctx := setupTest(t)
113+
d := daemon.New(t)
114+
const opt4 = "false"
115+
const opt6 = "true"
116+
d.StartWithBusybox(ctx, t,
117+
"--default-network-opt=bridge=com.docker.network.enable_ipv4="+opt4,
118+
"--default-network-opt=bridge=com.docker.network.enable_ipv6="+opt6,
119+
)
120+
defer d.Stop(t)
121+
c := d.NewClientT(t)
122+
123+
t.Run("TestDefaultIPvOptOverride", func(t *testing.T) {
124+
for _, override4 := range []bool{false, true} {
125+
for _, override6 := range []bool{false, true} {
126+
t.Run(fmt.Sprintf("override4=%v,override6=%v", override4, override6), func(t *testing.T) {
127+
t.Parallel()
128+
netName := fmt.Sprintf("tdioo-%v-%v", override4, override6)
129+
var nopts []func(*networktypes.CreateOptions)
130+
if override4 {
131+
nopts = append(nopts, network.WithIPv4(true))
132+
}
133+
if override6 {
134+
nopts = append(nopts, network.WithIPv6())
135+
}
136+
network.CreateNoError(ctx, t, c, netName, nopts...)
137+
defer network.RemoveNoError(ctx, t, c, netName)
138+
139+
insp, err := c.NetworkInspect(ctx, netName, networktypes.InspectOptions{})
140+
assert.NilError(t, err)
141+
t.Log("override4", override4, "override6", override6, "->", insp.Options)
142+
143+
gotOpt4, have4 := insp.Options[netlabel.EnableIPv4]
144+
assert.Check(t, is.Equal(have4, !override4))
145+
assert.Check(t, is.Equal(insp.EnableIPv4, override4))
146+
if have4 {
147+
assert.Check(t, is.Equal(gotOpt4, opt4))
148+
}
149+
150+
gotOpt6, have6 := insp.Options[netlabel.EnableIPv6]
151+
assert.Check(t, is.Equal(have6, !override6))
152+
assert.Check(t, is.Equal(insp.EnableIPv6, true))
153+
if have6 {
154+
assert.Check(t, is.Equal(gotOpt6, opt6))
155+
}
156+
})
157+
}
158+
}
159+
})
160+
}
161+
107162
// Check that it's possible to create IPv6 networks with a 64-bit ip-range,
108163
// in 64-bit and bigger subnets, with and without a gateway.
109164
func Test64BitIPRange(t *testing.T) {

0 commit comments

Comments
 (0)