@@ -1336,6 +1336,53 @@ func verifyIPAddresses(c *check.C, cName, nwname, ipv4, ipv6 string) {
13361336 c .Assert (strings .TrimSpace (out ), check .Equals , ipv6 )
13371337}
13381338
1339+ func (s * DockerNetworkSuite ) TestDockerNetworkConnectLinkLocalIP (c * check.C ) {
1340+ // create one test network
1341+ dockerCmd (c , "network" , "create" , "n0" )
1342+ assertNwIsAvailable (c , "n0" )
1343+
1344+ // run a container with incorrect link-local address
1345+ _ , _ , err := dockerCmdWithError ("run" , "--link-local-ip" , "169.253.5.5" , "busybox" , "top" )
1346+ c .Assert (err , check .NotNil )
1347+ _ , _ , err = dockerCmdWithError ("run" , "--link-local-ip" , "2001:db8::89" , "busybox" , "top" )
1348+ c .Assert (err , check .NotNil )
1349+
1350+ // run two containers with link-local ip on the test network
1351+ dockerCmd (c , "run" , "-d" , "--name" , "c0" , "--net=n0" , "--link-local-ip" , "169.254.7.7" , "--link-local-ip" , "fe80::254:77" , "busybox" , "top" )
1352+ c .Assert (waitRun ("c0" ), check .IsNil )
1353+ dockerCmd (c , "run" , "-d" , "--name" , "c1" , "--net=n0" , "--link-local-ip" , "169.254.8.8" , "--link-local-ip" , "fe80::254:88" , "busybox" , "top" )
1354+ c .Assert (waitRun ("c1" ), check .IsNil )
1355+
1356+ // run a container on the default network and connect it to the test network specifying a link-local address
1357+ dockerCmd (c , "run" , "-d" , "--name" , "c2" , "busybox" , "top" )
1358+ c .Assert (waitRun ("c2" ), check .IsNil )
1359+ dockerCmd (c , "network" , "connect" , "--link-local-ip" , "169.254.9.9" , "n0" , "c2" )
1360+
1361+ // verify the three containers can ping each other via the link-local addresses
1362+ _ , _ , err = dockerCmdWithError ("exec" , "c0" , "ping" , "-c" , "1" , "169.254.8.8" )
1363+ c .Assert (err , check .IsNil )
1364+ _ , _ , err = dockerCmdWithError ("exec" , "c1" , "ping" , "-c" , "1" , "169.254.9.9" )
1365+ c .Assert (err , check .IsNil )
1366+ _ , _ , err = dockerCmdWithError ("exec" , "c2" , "ping" , "-c" , "1" , "169.254.7.7" )
1367+ c .Assert (err , check .IsNil )
1368+
1369+ // Stop and restart the three containers
1370+ dockerCmd (c , "stop" , "c0" )
1371+ dockerCmd (c , "stop" , "c1" )
1372+ dockerCmd (c , "stop" , "c2" )
1373+ dockerCmd (c , "start" , "c0" )
1374+ dockerCmd (c , "start" , "c1" )
1375+ dockerCmd (c , "start" , "c2" )
1376+
1377+ // verify the ping again
1378+ _ , _ , err = dockerCmdWithError ("exec" , "c0" , "ping" , "-c" , "1" , "169.254.8.8" )
1379+ c .Assert (err , check .IsNil )
1380+ _ , _ , err = dockerCmdWithError ("exec" , "c1" , "ping" , "-c" , "1" , "169.254.9.9" )
1381+ c .Assert (err , check .IsNil )
1382+ _ , _ , err = dockerCmdWithError ("exec" , "c2" , "ping" , "-c" , "1" , "169.254.7.7" )
1383+ c .Assert (err , check .IsNil )
1384+ }
1385+
13391386func (s * DockerSuite ) TestUserDefinedNetworkConnectDisconnectLink (c * check.C ) {
13401387 testRequires (c , DaemonIsLinux , NotUserNamespace , NotArm )
13411388 dockerCmd (c , "network" , "create" , "-d" , "bridge" , "foo1" )
0 commit comments