From 981686787bc7dc4811ad6225115491f17157077f Mon Sep 17 00:00:00 2001 From: Madhu Venugopal Date: Thu, 9 Jul 2015 20:46:36 -0700 Subject: [PATCH] Fixed a bug in DeleteEndpoint to properly release v6 ip When fixed-cidrv6 is used, the allocation and release must happen from the appropriate network. Allocation is done properly in createendpoint, but the DeleteEndpoint wasnt taking care of this case. Signed-off-by: Madhu Venugopal --- libnetwork/drivers/bridge/bridge.go | 6 +++++- libnetwork/drivers/bridge/setup_fixedcidrv6_test.go | 7 +++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/libnetwork/drivers/bridge/bridge.go b/libnetwork/drivers/bridge/bridge.go index b0ec3f22c3..9f822dca0c 100644 --- a/libnetwork/drivers/bridge/bridge.go +++ b/libnetwork/drivers/bridge/bridge.go @@ -1047,7 +1047,11 @@ func (d *driver) DeleteEndpoint(nid, eid types.UUID) error { // Release the v6 address allocated to this endpoint's sandbox interface if config.EnableIPv6 { - err := ipAllocator.ReleaseIP(n.bridge.bridgeIPv6, ep.addrv6.IP) + network := n.bridge.bridgeIPv6 + if config.FixedCIDRv6 != nil { + network = config.FixedCIDRv6 + } + err := ipAllocator.ReleaseIP(network, ep.addrv6.IP) if err != nil { return err } diff --git a/libnetwork/drivers/bridge/setup_fixedcidrv6_test.go b/libnetwork/drivers/bridge/setup_fixedcidrv6_test.go index a6d0084252..06eaf7cbea 100644 --- a/libnetwork/drivers/bridge/setup_fixedcidrv6_test.go +++ b/libnetwork/drivers/bridge/setup_fixedcidrv6_test.go @@ -29,9 +29,16 @@ func TestSetupFixedCIDRv6(t *testing.T) { t.Fatalf("Failed to setup bridge FixedCIDRv6: %v", err) } + var ip net.IP if ip, err := ipAllocator.RequestIP(config.FixedCIDRv6, nil); err != nil { t.Fatalf("Failed to request IP to allocator: %v", err) } else if expected := "2002:db8::1"; ip.String() != expected { t.Fatalf("Expected allocated IP %s, got %s", expected, ip) } + + if err := ipAllocator.ReleaseIP(config.FixedCIDRv6, ip); err != nil { + t.Fatalf("Failed to release IP from allocator: %v", err) + } else if _, err := ipAllocator.RequestIP(config.FixedCIDRv6, ip); err != nil { + t.Fatalf("Failed to request a released IP: %v", err) + } }