From 79556b1ccce3604bb0abca54cd8c961dd01b14b3 Mon Sep 17 00:00:00 2001 From: Jana Radhakrishnan Date: Tue, 12 May 2015 23:35:15 +0000 Subject: [PATCH] Fix issue in ipv6 when a non-default link-local ipv6 address is present. If the bridge exists and it exists with a different link local ip address than fe80::1/64 then we waifl to accept that as a valid configuration without trying to add the default link local ip address. With this fix we always try to add the default link local address if it doesn't exist. Signed-off-by: Jana Radhakrishnan --- libnetwork/drivers/bridge/error.go | 2 +- libnetwork/drivers/bridge/setup_ipv6.go | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/libnetwork/drivers/bridge/error.go b/libnetwork/drivers/bridge/error.go index 9f53e9a0be..5f149c46d9 100644 --- a/libnetwork/drivers/bridge/error.go +++ b/libnetwork/drivers/bridge/error.go @@ -190,7 +190,7 @@ func (ipv4 *IPv4AddrNoMatchError) Error() string { type IPv6AddrNoMatchError net.IPNet func (ipv6 *IPv6AddrNoMatchError) Error() string { - return fmt.Sprintf("bridge IPv6 addresses do not match the expected bridge configuration %s", ipv6) + return fmt.Sprintf("bridge IPv6 addresses do not match the expected bridge configuration %s", (*net.IPNet)(ipv6).String()) } // InvalidLinkIPAddrError is returned when a link is configured to a container with an invalid ip address diff --git a/libnetwork/drivers/bridge/setup_ipv6.go b/libnetwork/drivers/bridge/setup_ipv6.go index afe4409658..81cbda1b88 100644 --- a/libnetwork/drivers/bridge/setup_ipv6.go +++ b/libnetwork/drivers/bridge/setup_ipv6.go @@ -34,7 +34,8 @@ func setupBridgeIPv6(config *NetworkConfiguration, i *bridgeInterface) error { return err } - if len(addrsv6) == 0 { + // Add the default link local ipv6 address if it doesn't exist + if !findIPv6Address(netlink.Addr{IPNet: bridgeIPv6}, addrsv6) { if err := netlink.AddrAdd(i.Link, &netlink.Addr{IPNet: bridgeIPv6}); err != nil { return &IPv6AddrAddError{ip: bridgeIPv6, err: err} }