Merge pull request #273 from zreigz/reconfigure-bridge-ip

Reconfigure bridge IP address
This commit is contained in:
Tom Denham
2016-08-12 15:04:22 -07:00
committed by GitHub
5 changed files with 224 additions and 11 deletions

View File

@ -251,4 +251,74 @@ var _ = Describe("bridge Operations", func() {
})
Expect(err).NotTo(HaveOccurred())
})
It("ensure bridge address", func() {
const IFNAME = "bridge0"
const EXPECTED_IP = "10.0.0.0/8"
const CHANGED_EXPECTED_IP = "10.1.2.3/16"
conf := &NetConf{
NetConf: types.NetConf{
Name: "testConfig",
Type: "bridge",
},
BrName: IFNAME,
IsGW: true,
IPMasq: false,
MTU: 5000,
}
gwnFirst := &net.IPNet{
IP: net.IPv4(10, 0, 0, 0),
Mask: net.CIDRMask(8, 32),
}
gwnSecond := &net.IPNet{
IP: net.IPv4(10, 1, 2, 3),
Mask: net.CIDRMask(16, 32),
}
err := originalNS.Do(func(ns.NetNS) error {
defer GinkgoRecover()
bridge, err := setupBridge(conf)
Expect(err).NotTo(HaveOccurred())
// Check if ForceAddress has default value
Expect(conf.ForceAddress).To(Equal(false))
err = ensureBridgeAddr(bridge, gwnFirst, conf.ForceAddress)
Expect(err).NotTo(HaveOccurred())
//Check if IP address is set correctly
addrs, err := netlink.AddrList(bridge, syscall.AF_INET)
Expect(len(addrs)).To(Equal(1))
addr := addrs[0].IPNet.String()
Expect(addr).To(Equal(EXPECTED_IP))
//The bridge IP address has been changed. Error expected when ForceAddress is set to false.
err = ensureBridgeAddr(bridge, gwnSecond, false)
Expect(err).To(HaveOccurred())
//The IP address should stay the same.
addrs, err = netlink.AddrList(bridge, syscall.AF_INET)
Expect(len(addrs)).To(Equal(1))
addr = addrs[0].IPNet.String()
Expect(addr).To(Equal(EXPECTED_IP))
//Reconfigure IP when ForceAddress is set to true and IP address has been changed.
err = ensureBridgeAddr(bridge, gwnSecond, true)
Expect(err).NotTo(HaveOccurred())
//Retrieve the IP address after reconfiguration
addrs, err = netlink.AddrList(bridge, syscall.AF_INET)
Expect(len(addrs)).To(Equal(1))
addr = addrs[0].IPNet.String()
Expect(addr).To(Equal(CHANGED_EXPECTED_IP))
return nil
})
Expect(err).NotTo(HaveOccurred())
})
})