From ac7c84ab0be7bf532d804aaa10d041622f7d2572 Mon Sep 17 00:00:00 2001 From: Alexander D'souza Date: Thu, 18 Jul 2013 14:07:56 +0200 Subject: [PATCH] Follow up patch for Click: Bug 760 - IP address removal can be painful --- src/click/model/ipv4-l3-click-protocol.cc | 23 +++++++++++++++++++++++ src/click/model/ipv4-l3-click-protocol.h | 1 + 2 files changed, 24 insertions(+) diff --git a/src/click/model/ipv4-l3-click-protocol.cc b/src/click/model/ipv4-l3-click-protocol.cc index 8761bd0cd..4b721d5e2 100644 --- a/src/click/model/ipv4-l3-click-protocol.cc +++ b/src/click/model/ipv4-l3-click-protocol.cc @@ -434,6 +434,29 @@ Ipv4L3ClickProtocol::RemoveAddress (uint32_t i, uint32_t addressIndex) return false; } +bool +Ipv4L3ClickProtocol::RemoveAddress (uint32_t i, Ipv4Address address) +{ + NS_LOG_FUNCTION (this << i << address); + + if (address == Ipv4Address::GetLoopback()) + { + NS_LOG_WARN ("Cannot remove loopback address."); + return false; + } + Ptr interface = GetInterface (i); + Ipv4InterfaceAddress ifAddr = interface->RemoveAddress (address); + if (ifAddr != Ipv4InterfaceAddress ()) + { + if (m_routingProtocol != 0) + { + m_routingProtocol->NotifyRemoveAddress (i, ifAddr); + } + return true; + } + return false; +} + Ipv4Address Ipv4L3ClickProtocol::SelectSourceAddress (Ptr device, Ipv4Address dst, Ipv4InterfaceAddress::InterfaceAddressScope_e scope) diff --git a/src/click/model/ipv4-l3-click-protocol.h b/src/click/model/ipv4-l3-click-protocol.h index 3f0bece9c..0c35738e3 100644 --- a/src/click/model/ipv4-l3-click-protocol.h +++ b/src/click/model/ipv4-l3-click-protocol.h @@ -215,6 +215,7 @@ public: Ipv4InterfaceAddress GetAddress (uint32_t interfaceIndex, uint32_t addressIndex) const; uint32_t GetNAddresses (uint32_t interface) const; bool RemoveAddress (uint32_t interfaceIndex, uint32_t addressIndex); + bool RemoveAddress (uint32_t interfaceIndex, Ipv4Address address); Ipv4Address SelectSourceAddress (Ptr device, Ipv4Address dst, Ipv4InterfaceAddress::InterfaceAddressScope_e scope);