Bug 2124 - UdpSocketImpl::ShutdownRecv doesn't stop the Ipv[4,6]EndPointDemux
authorTommaso Pecorella <tommaso.pecorella@unifi.it>
Thu, 02 Jul 2015 18:21:44 +0200
changeset 11470 0b3d6135a28b
parent 11469 9abee8401b7d
child 11471 ca8699410ede
Bug 2124 - UdpSocketImpl::ShutdownRecv doesn't stop the Ipv[4,6]EndPointDemux
RELEASE_NOTES
src/internet/bindings/callbacks_list.py
src/internet/bindings/modulegen__gcc_ILP32.py
src/internet/bindings/modulegen__gcc_LP64.py
src/internet/model/ipv4-end-point-demux.cc
src/internet/model/ipv4-end-point-demux.h
src/internet/model/ipv4-end-point.cc
src/internet/model/ipv4-end-point.h
src/internet/model/ipv6-end-point-demux.cc
src/internet/model/ipv6-end-point-demux.h
src/internet/model/ipv6-end-point.cc
src/internet/model/ipv6-end-point.h
src/internet/model/udp-socket-impl.cc
src/internet/test/ipv6-dual-stack-test-suite.cc
src/internet/test/tcp-test.cc
src/internet/test/tcp-timestamp-test.cc
src/internet/test/tcp-wscaling-test.cc
src/internet/wscript
--- a/RELEASE_NOTES	Sun Jun 14 22:30:44 2015 +0200
+++ b/RELEASE_NOTES	Thu Jul 02 18:21:44 2015 +0200
@@ -29,6 +29,7 @@
 - Bug 1736 - default dot11EDCATableMSDULifetime
 - Bug 1929 - TcpL4Protocol::Send must indicate the source address to routing (if known)
 - Bug 2108 - Erroneous implementation in InterferenceHelper
+- Bug 2124 - UdpSocketImpl::ShutdownRecv doesn't stop the Ipv[4,6]EndPointDemux
 - Bug 2126 - LrWpanNetDevice silently accepts no mobility on the node
 - Bug 2130 - Allow SimpleChannel to simulate hidden terminals.
 - Bug 2135 - TCP doesn't honor the socket's output interface
--- a/src/internet/bindings/callbacks_list.py	Sun Jun 14 22:30:44 2015 +0200
+++ b/src/internet/bindings/callbacks_list.py	Thu Jul 02 18:21:44 2015 +0200
@@ -1,8 +1,6 @@
 callback_classes = [
     ['void', 'ns3::Ipv6Address', 'unsigned char', 'unsigned char', 'unsigned char', 'unsigned int', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ipv4Address', 'unsigned char', 'unsigned char', 'unsigned char', 'unsigned int', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
-    ['void', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
-    ['void', 'ns3::Ptr<ns3::Packet>', 'ns3::Ipv4Header', 'unsigned short', 'ns3::Ptr<ns3::Ipv4Interface>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::Socket>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::Socket>', 'unsigned int', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::Socket>', 'ns3::Address const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
--- a/src/internet/bindings/modulegen__gcc_ILP32.py	Sun Jun 14 22:30:44 2015 +0200
+++ b/src/internet/bindings/modulegen__gcc_ILP32.py	Thu Jul 02 18:21:44 2015 +0200
@@ -120,8 +120,6 @@
     module.add_class('Ipv4AddressGenerator')
     ## ipv4-address-helper.h (module 'internet'): ns3::Ipv4AddressHelper [class]
     module.add_class('Ipv4AddressHelper')
-    ## ipv4-end-point.h (module 'internet'): ns3::Ipv4EndPoint [class]
-    module.add_class('Ipv4EndPoint')
     ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4InterfaceAddress [class]
     module.add_class('Ipv4InterfaceAddress')
     ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e [enumeration]
@@ -847,7 +845,6 @@
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4AddressGenerator_methods(root_module, root_module['ns3::Ipv4AddressGenerator'])
     register_Ns3Ipv4AddressHelper_methods(root_module, root_module['ns3::Ipv4AddressHelper'])
-    register_Ns3Ipv4EndPoint_methods(root_module, root_module['ns3::Ipv4EndPoint'])
     register_Ns3Ipv4InterfaceAddress_methods(root_module, root_module['ns3::Ipv4InterfaceAddress'])
     register_Ns3Ipv4InterfaceContainer_methods(root_module, root_module['ns3::Ipv4InterfaceContainer'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
@@ -2515,65 +2512,6 @@
                    [param('ns3::Ipv4Address', 'network'), param('ns3::Ipv4Mask', 'mask'), param('ns3::Ipv4Address', 'base', default_value='"0.0.0.1"')])
     return
 
-def register_Ns3Ipv4EndPoint_methods(root_module, cls):
-    ## ipv4-end-point.h (module 'internet'): ns3::Ipv4EndPoint::Ipv4EndPoint(ns3::Ipv4EndPoint const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv4EndPoint const &', 'arg0')])
-    ## ipv4-end-point.h (module 'internet'): ns3::Ipv4EndPoint::Ipv4EndPoint(ns3::Ipv4Address address, uint16_t port) [constructor]
-    cls.add_constructor([param('ns3::Ipv4Address', 'address'), param('uint16_t', 'port')])
-    ## ipv4-end-point.h (module 'internet'): void ns3::Ipv4EndPoint::BindToNetDevice(ns3::Ptr<ns3::NetDevice> netdevice) [member function]
-    cls.add_method('BindToNetDevice', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::NetDevice >', 'netdevice')])
-    ## ipv4-end-point.h (module 'internet'): void ns3::Ipv4EndPoint::ForwardIcmp(ns3::Ipv4Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo) [member function]
-    cls.add_method('ForwardIcmp', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'icmpSource'), param('uint8_t', 'icmpTtl'), param('uint8_t', 'icmpType'), param('uint8_t', 'icmpCode'), param('uint32_t', 'icmpInfo')])
-    ## ipv4-end-point.h (module 'internet'): void ns3::Ipv4EndPoint::ForwardUp(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, uint16_t sport, ns3::Ptr<ns3::Ipv4Interface> incomingInterface) [member function]
-    cls.add_method('ForwardUp', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('uint16_t', 'sport'), param('ns3::Ptr< ns3::Ipv4Interface >', 'incomingInterface')])
-    ## ipv4-end-point.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv4EndPoint::GetBoundNetDevice() [member function]
-    cls.add_method('GetBoundNetDevice', 
-                   'ns3::Ptr< ns3::NetDevice >', 
-                   [])
-    ## ipv4-end-point.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4EndPoint::GetLocalAddress() [member function]
-    cls.add_method('GetLocalAddress', 
-                   'ns3::Ipv4Address', 
-                   [])
-    ## ipv4-end-point.h (module 'internet'): uint16_t ns3::Ipv4EndPoint::GetLocalPort() [member function]
-    cls.add_method('GetLocalPort', 
-                   'uint16_t', 
-                   [])
-    ## ipv4-end-point.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4EndPoint::GetPeerAddress() [member function]
-    cls.add_method('GetPeerAddress', 
-                   'ns3::Ipv4Address', 
-                   [])
-    ## ipv4-end-point.h (module 'internet'): uint16_t ns3::Ipv4EndPoint::GetPeerPort() [member function]
-    cls.add_method('GetPeerPort', 
-                   'uint16_t', 
-                   [])
-    ## ipv4-end-point.h (module 'internet'): void ns3::Ipv4EndPoint::SetDestroyCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
-    cls.add_method('SetDestroyCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
-    ## ipv4-end-point.h (module 'internet'): void ns3::Ipv4EndPoint::SetIcmpCallback(ns3::Callback<void, ns3::Ipv4Address, unsigned char, unsigned char, unsigned char, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
-    cls.add_method('SetIcmpCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::Ipv4Address, unsigned char, unsigned char, unsigned char, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
-    ## ipv4-end-point.h (module 'internet'): void ns3::Ipv4EndPoint::SetLocalAddress(ns3::Ipv4Address address) [member function]
-    cls.add_method('SetLocalAddress', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'address')])
-    ## ipv4-end-point.h (module 'internet'): void ns3::Ipv4EndPoint::SetPeer(ns3::Ipv4Address address, uint16_t port) [member function]
-    cls.add_method('SetPeer', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'address'), param('uint16_t', 'port')])
-    ## ipv4-end-point.h (module 'internet'): void ns3::Ipv4EndPoint::SetRxCallback(ns3::Callback<void, ns3::Ptr<ns3::Packet>, ns3::Ipv4Header, unsigned short, ns3::Ptr<ns3::Ipv4Interface>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
-    cls.add_method('SetRxCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::Ipv4Header, unsigned short, ns3::Ptr< ns3::Ipv4Interface >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
-    return
-
 def register_Ns3Ipv4InterfaceAddress_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_output_stream_operator()
@@ -4223,10 +4161,10 @@
     cls.add_method('Close', 
                    'void', 
                    [])
-    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
+    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t & packets, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
     cls.add_method('Diff', 
                    'bool', 
-                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
+                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t &', 'packets'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
                    is_static=True)
     ## pcap-file.h (module 'network'): bool ns3::PcapFile::Eof() const [member function]
     cls.add_method('Eof', 
@@ -14710,7 +14648,7 @@
     cls.add_constructor([])
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice(ns3::NetDevice const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDevice const &', 'arg0')])
-    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -16112,7 +16050,7 @@
     cls.add_method('AddBridgePort', 
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'bridgePort')])
-    ## bridge-net-device.h (module 'bridge'): void ns3::BridgeNetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    ## bridge-net-device.h (module 'bridge'): void ns3::BridgeNetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -16905,7 +16843,7 @@
     cls.add_constructor([param('ns3::LoopbackNetDevice const &', 'arg0')])
     ## loopback-net-device.h (module 'internet'): ns3::LoopbackNetDevice::LoopbackNetDevice() [constructor]
     cls.add_constructor([])
-    ## loopback-net-device.h (module 'internet'): void ns3::LoopbackNetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    ## loopback-net-device.h (module 'internet'): void ns3::LoopbackNetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
--- a/src/internet/bindings/modulegen__gcc_LP64.py	Sun Jun 14 22:30:44 2015 +0200
+++ b/src/internet/bindings/modulegen__gcc_LP64.py	Thu Jul 02 18:21:44 2015 +0200
@@ -120,8 +120,6 @@
     module.add_class('Ipv4AddressGenerator')
     ## ipv4-address-helper.h (module 'internet'): ns3::Ipv4AddressHelper [class]
     module.add_class('Ipv4AddressHelper')
-    ## ipv4-end-point.h (module 'internet'): ns3::Ipv4EndPoint [class]
-    module.add_class('Ipv4EndPoint')
     ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4InterfaceAddress [class]
     module.add_class('Ipv4InterfaceAddress')
     ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e [enumeration]
@@ -847,7 +845,6 @@
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4AddressGenerator_methods(root_module, root_module['ns3::Ipv4AddressGenerator'])
     register_Ns3Ipv4AddressHelper_methods(root_module, root_module['ns3::Ipv4AddressHelper'])
-    register_Ns3Ipv4EndPoint_methods(root_module, root_module['ns3::Ipv4EndPoint'])
     register_Ns3Ipv4InterfaceAddress_methods(root_module, root_module['ns3::Ipv4InterfaceAddress'])
     register_Ns3Ipv4InterfaceContainer_methods(root_module, root_module['ns3::Ipv4InterfaceContainer'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
@@ -2515,65 +2512,6 @@
                    [param('ns3::Ipv4Address', 'network'), param('ns3::Ipv4Mask', 'mask'), param('ns3::Ipv4Address', 'base', default_value='"0.0.0.1"')])
     return
 
-def register_Ns3Ipv4EndPoint_methods(root_module, cls):
-    ## ipv4-end-point.h (module 'internet'): ns3::Ipv4EndPoint::Ipv4EndPoint(ns3::Ipv4EndPoint const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv4EndPoint const &', 'arg0')])
-    ## ipv4-end-point.h (module 'internet'): ns3::Ipv4EndPoint::Ipv4EndPoint(ns3::Ipv4Address address, uint16_t port) [constructor]
-    cls.add_constructor([param('ns3::Ipv4Address', 'address'), param('uint16_t', 'port')])
-    ## ipv4-end-point.h (module 'internet'): void ns3::Ipv4EndPoint::BindToNetDevice(ns3::Ptr<ns3::NetDevice> netdevice) [member function]
-    cls.add_method('BindToNetDevice', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::NetDevice >', 'netdevice')])
-    ## ipv4-end-point.h (module 'internet'): void ns3::Ipv4EndPoint::ForwardIcmp(ns3::Ipv4Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo) [member function]
-    cls.add_method('ForwardIcmp', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'icmpSource'), param('uint8_t', 'icmpTtl'), param('uint8_t', 'icmpType'), param('uint8_t', 'icmpCode'), param('uint32_t', 'icmpInfo')])
-    ## ipv4-end-point.h (module 'internet'): void ns3::Ipv4EndPoint::ForwardUp(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, uint16_t sport, ns3::Ptr<ns3::Ipv4Interface> incomingInterface) [member function]
-    cls.add_method('ForwardUp', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('uint16_t', 'sport'), param('ns3::Ptr< ns3::Ipv4Interface >', 'incomingInterface')])
-    ## ipv4-end-point.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv4EndPoint::GetBoundNetDevice() [member function]
-    cls.add_method('GetBoundNetDevice', 
-                   'ns3::Ptr< ns3::NetDevice >', 
-                   [])
-    ## ipv4-end-point.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4EndPoint::GetLocalAddress() [member function]
-    cls.add_method('GetLocalAddress', 
-                   'ns3::Ipv4Address', 
-                   [])
-    ## ipv4-end-point.h (module 'internet'): uint16_t ns3::Ipv4EndPoint::GetLocalPort() [member function]
-    cls.add_method('GetLocalPort', 
-                   'uint16_t', 
-                   [])
-    ## ipv4-end-point.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4EndPoint::GetPeerAddress() [member function]
-    cls.add_method('GetPeerAddress', 
-                   'ns3::Ipv4Address', 
-                   [])
-    ## ipv4-end-point.h (module 'internet'): uint16_t ns3::Ipv4EndPoint::GetPeerPort() [member function]
-    cls.add_method('GetPeerPort', 
-                   'uint16_t', 
-                   [])
-    ## ipv4-end-point.h (module 'internet'): void ns3::Ipv4EndPoint::SetDestroyCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
-    cls.add_method('SetDestroyCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
-    ## ipv4-end-point.h (module 'internet'): void ns3::Ipv4EndPoint::SetIcmpCallback(ns3::Callback<void, ns3::Ipv4Address, unsigned char, unsigned char, unsigned char, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
-    cls.add_method('SetIcmpCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::Ipv4Address, unsigned char, unsigned char, unsigned char, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
-    ## ipv4-end-point.h (module 'internet'): void ns3::Ipv4EndPoint::SetLocalAddress(ns3::Ipv4Address address) [member function]
-    cls.add_method('SetLocalAddress', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'address')])
-    ## ipv4-end-point.h (module 'internet'): void ns3::Ipv4EndPoint::SetPeer(ns3::Ipv4Address address, uint16_t port) [member function]
-    cls.add_method('SetPeer', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'address'), param('uint16_t', 'port')])
-    ## ipv4-end-point.h (module 'internet'): void ns3::Ipv4EndPoint::SetRxCallback(ns3::Callback<void, ns3::Ptr<ns3::Packet>, ns3::Ipv4Header, unsigned short, ns3::Ptr<ns3::Ipv4Interface>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
-    cls.add_method('SetRxCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::Ipv4Header, unsigned short, ns3::Ptr< ns3::Ipv4Interface >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
-    return
-
 def register_Ns3Ipv4InterfaceAddress_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_output_stream_operator()
@@ -4223,10 +4161,10 @@
     cls.add_method('Close', 
                    'void', 
                    [])
-    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
+    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t & packets, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
     cls.add_method('Diff', 
                    'bool', 
-                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
+                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t &', 'packets'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
                    is_static=True)
     ## pcap-file.h (module 'network'): bool ns3::PcapFile::Eof() const [member function]
     cls.add_method('Eof', 
@@ -14710,7 +14648,7 @@
     cls.add_constructor([])
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice(ns3::NetDevice const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDevice const &', 'arg0')])
-    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -16112,7 +16050,7 @@
     cls.add_method('AddBridgePort', 
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'bridgePort')])
-    ## bridge-net-device.h (module 'bridge'): void ns3::BridgeNetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    ## bridge-net-device.h (module 'bridge'): void ns3::BridgeNetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -16905,7 +16843,7 @@
     cls.add_constructor([param('ns3::LoopbackNetDevice const &', 'arg0')])
     ## loopback-net-device.h (module 'internet'): ns3::LoopbackNetDevice::LoopbackNetDevice() [constructor]
     cls.add_constructor([])
-    ## loopback-net-device.h (module 'internet'): void ns3::LoopbackNetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    ## loopback-net-device.h (module 'internet'): void ns3::LoopbackNetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
--- a/src/internet/model/ipv4-end-point-demux.cc	Sun Jun 14 22:30:44 2015 +0200
+++ b/src/internet/model/ipv4-end-point-demux.cc	Thu Jul 02 18:21:44 2015 +0200
@@ -207,10 +207,19 @@
   for (EndPointsI i = m_endPoints.begin (); i != m_endPoints.end (); i++) 
     {
       Ipv4EndPoint* endP = *i;
+
       NS_LOG_DEBUG ("Looking at endpoint dport=" << endP->GetLocalPort ()
                                                  << " daddr=" << endP->GetLocalAddress ()
                                                  << " sport=" << endP->GetPeerPort ()
                                                  << " saddr=" << endP->GetPeerAddress ());
+
+      if (!endP->IsRxEnabled ())
+        {
+          NS_LOG_LOGIC ("Skipping endpoint " << &endP
+                        << " because endpoint can not receive packets");
+          continue;
+        }
+
       if (endP->GetLocalPort () != dport) 
         {
           NS_LOG_LOGIC ("Skipping endpoint " << &endP
--- a/src/internet/model/ipv4-end-point-demux.h	Sun Jun 14 22:30:44 2015 +0200
+++ b/src/internet/model/ipv4-end-point-demux.h	Thu Jul 02 18:21:44 2015 +0200
@@ -78,6 +78,15 @@
 
   /**
    * \brief lookup for a match with all the parameters.
+   *
+   * The function will return a list of most-matching EndPoints, in this order:
+   *   -# Full match
+   *   -# All but local address
+   *   -# Only local port and local address match
+   *   -# Only local port match
+   *
+   * EndPoint with disabled Rx are skipped.
+   *
    * \param daddr destination address to test
    * \param dport destination port to test
    * \param saddr source address to test
--- a/src/internet/model/ipv4-end-point.cc	Sun Jun 14 22:30:44 2015 +0200
+++ b/src/internet/model/ipv4-end-point.cc	Thu Jul 02 18:21:44 2015 +0200
@@ -31,10 +31,12 @@
   : m_localAddr (address), 
     m_localPort (port),
     m_peerAddr (Ipv4Address::GetAny ()),
-    m_peerPort (0)
+    m_peerPort (0),
+    m_rxEnabled (true)
 {
   NS_LOG_FUNCTION (this << address << port);
 }
+
 Ipv4EndPoint::~Ipv4EndPoint ()
 {
   NS_LOG_FUNCTION (this);
@@ -67,18 +69,21 @@
   NS_LOG_FUNCTION (this);
   return m_localPort;
 }
+
 Ipv4Address 
 Ipv4EndPoint::GetPeerAddress (void)
 {
   NS_LOG_FUNCTION (this);
   return m_peerAddr;
 }
+
 uint16_t 
 Ipv4EndPoint::GetPeerPort (void)
 {
   NS_LOG_FUNCTION (this);
   return m_peerPort;
 }
+
 void 
 Ipv4EndPoint::SetPeer (Ipv4Address address, uint16_t port)
 {
@@ -108,6 +113,7 @@
   NS_LOG_FUNCTION (this << &callback);
   m_rxCallback = callback;
 }
+
 void 
 Ipv4EndPoint::SetIcmpCallback (Callback<void,Ipv4Address,uint8_t,uint8_t,uint8_t,uint32_t> callback)
 {
@@ -134,6 +140,7 @@
                               incomingInterface);
     }
 }
+
 void 
 Ipv4EndPoint::DoForwardUp (Ptr<Packet> p, const Ipv4Header& header, uint16_t sport,
                            Ptr<Ipv4Interface> incomingInterface)
@@ -159,6 +166,7 @@
                               icmpSource, icmpTtl, icmpType, icmpCode, icmpInfo);
     }
 }
+
 void 
 Ipv4EndPoint::DoForwardIcmp (Ipv4Address icmpSource, uint8_t icmpTtl, 
                              uint8_t icmpType, uint8_t icmpCode,
@@ -172,4 +180,16 @@
     }
 }
 
+void
+Ipv4EndPoint::SetRxEnabled (bool enabled)
+{
+  m_rxEnabled = enabled;
+}
+
+bool
+Ipv4EndPoint::IsRxEnabled ()
+{
+  return m_rxEnabled;
+}
+
 } // namespace ns3
--- a/src/internet/model/ipv4-end-point.h	Sun Jun 14 22:30:44 2015 +0200
+++ b/src/internet/model/ipv4-end-point.h	Thu Jul 02 18:21:44 2015 +0200
@@ -168,6 +168,18 @@
                     uint8_t icmpType, uint8_t icmpCode,
                     uint32_t icmpInfo);
 
+  /**
+   * \brief Enable or Disable the endpoint Rx capability.
+   * \param enabled true if Rx is enabled
+   */
+  void SetRxEnabled (bool enabled);
+
+  /**
+   * \brief Checks if the endpoint can receive packets.
+   * \returns true if the endpoint can receive packets.
+   */
+  bool IsRxEnabled (void);
+
 private:
   /**
    * \brief ForwardUp wrapper.
@@ -229,6 +241,11 @@
    * \brief The destroy callback.
    */
   Callback<void> m_destroyCallback;
+
+  /**
+   * \brief true if the endpoint can receive packets.
+   */
+  bool m_rxEnabled;
 };
 
 } // namespace ns3
--- a/src/internet/model/ipv6-end-point-demux.cc	Sun Jun 14 22:30:44 2015 +0200
+++ b/src/internet/model/ipv6-end-point-demux.cc	Thu Jul 02 18:21:44 2015 +0200
@@ -182,10 +182,19 @@
   for (EndPointsI i = m_endPoints.begin (); i != m_endPoints.end (); i++)
     {
       Ipv6EndPoint* endP = *i;
+
       NS_LOG_DEBUG ("Looking at endpoint dport=" << endP->GetLocalPort ()
                                                  << " daddr=" << endP->GetLocalAddress ()
                                                  << " sport=" << endP->GetPeerPort ()
                                                  << " saddr=" << endP->GetPeerAddress ());
+
+      if (!endP->IsRxEnabled ())
+        {
+          NS_LOG_LOGIC ("Skipping endpoint " << &endP
+                        << " because endpoint can not receive packets");
+          continue;
+        }
+
       if (endP->GetLocalPort () != dport)
         {
           NS_LOG_LOGIC ("Skipping endpoint " << &endP
--- a/src/internet/model/ipv6-end-point-demux.h	Sun Jun 14 22:30:44 2015 +0200
+++ b/src/internet/model/ipv6-end-point-demux.h	Thu Jul 02 18:21:44 2015 +0200
@@ -67,6 +67,15 @@
 
   /**
    * \brief lookup for a match with all the parameters.
+   *
+   * The function will return a list of most-matching EndPoints, in this order:
+   *   -# Full match
+   *   -# All but local address
+   *   -# Only local port and local address match
+   *   -# Only local port match
+   *
+   * EndPoint with disabled Rx are skipped.
+   *
    * \param dst destination address to test
    * \param dport destination port to test
    * \param src source address to test
--- a/src/internet/model/ipv6-end-point.cc	Sun Jun 14 22:30:44 2015 +0200
+++ b/src/internet/model/ipv6-end-point.cc	Thu Jul 02 18:21:44 2015 +0200
@@ -33,7 +33,8 @@
   : m_localAddr (addr),
     m_localPort (port),
     m_peerAddr (Ipv6Address::GetAny ()),
-    m_peerPort (0)
+    m_peerPort (0),
+    m_rxEnabled (true)
 {
 }
 
@@ -140,5 +141,16 @@
   m_icmpCallback (src, ttl, type, code, info);
 }
 
+void Ipv6EndPoint::SetRxEnabled (bool enabled)
+{
+  m_rxEnabled = enabled;
+}
+
+bool Ipv6EndPoint::IsRxEnabled ()
+{
+  return m_rxEnabled;
+}
+
+
 } /* namespace ns3 */
 
--- a/src/internet/model/ipv6-end-point.h	Sun Jun 14 22:30:44 2015 +0200
+++ b/src/internet/model/ipv6-end-point.h	Thu Jul 02 18:21:44 2015 +0200
@@ -177,6 +177,18 @@
   void ForwardIcmp (Ipv6Address src, uint8_t ttl, uint8_t type,
                     uint8_t code, uint32_t info);
 
+  /**
+   * \brief Enable or Disable the endpoint Rx capability.
+   * \param enabled true if Rx is enabled
+   */
+  void SetRxEnabled (bool enabled);
+
+  /**
+   * \brief Checks if the endpoint can receive packets.
+   * \returns true if the endpoint can receive packets.
+   */
+  bool IsRxEnabled (void);
+
 private:
   /**
    * \brief ForwardUp wrapper.
@@ -237,6 +249,11 @@
    * \brief The destroy callback.
    */
   Callback<void> m_destroyCallback;
+
+  /**
+   * \brief true if the endpoint can receive packets.
+   */
+  bool m_rxEnabled;
 };
 
 } /* namespace ns3 */
--- a/src/internet/model/udp-socket-impl.cc	Sun Jun 14 22:30:44 2015 +0200
+++ b/src/internet/model/udp-socket-impl.cc	Thu Jul 02 18:21:44 2015 +0200
@@ -329,6 +329,14 @@
 {
   NS_LOG_FUNCTION_NOARGS ();
   m_shutdownRecv = true;
+  if (m_endPoint)
+    {
+      m_endPoint->SetRxEnabled (false);
+    }
+  if (m_endPoint6)
+    {
+      m_endPoint6->SetRxEnabled (false);
+    }
   return 0;
 }
 
--- a/src/internet/test/ipv6-dual-stack-test-suite.cc	Sun Jun 14 22:30:44 2015 +0200
+++ b/src/internet/test/ipv6-dual-stack-test-suite.cc	Thu Jul 02 18:21:44 2015 +0200
@@ -37,7 +37,6 @@
 #include "ns3/uinteger.h"
 #include "ns3/log.h"
 
-#include "ns3/ipv4-end-point.h"
 #include "ns3/arp-l3-protocol.h"
 #include "ns3/ipv4-l3-protocol.h"
 #include "ns3/ipv6-l3-protocol.h"
--- a/src/internet/test/tcp-test.cc	Sun Jun 14 22:30:44 2015 +0200
+++ b/src/internet/test/tcp-test.cc	Thu Jul 02 18:21:44 2015 +0200
@@ -38,7 +38,6 @@
 #include "ns3/uinteger.h"
 #include "ns3/log.h"
 
-#include "ns3/ipv4-end-point.h"
 #include "ns3/arp-l3-protocol.h"
 #include "ns3/ipv4-l3-protocol.h"
 #include "ns3/ipv6-l3-protocol.h"
--- a/src/internet/test/tcp-timestamp-test.cc	Sun Jun 14 22:30:44 2015 +0200
+++ b/src/internet/test/tcp-timestamp-test.cc	Thu Jul 02 18:21:44 2015 +0200
@@ -36,7 +36,6 @@
 #include "ns3/log.h"
 #include "ns3/tcp-socket-base.h"
 
-#include "ns3/ipv4-end-point.h"
 #include "ns3/arp-l3-protocol.h"
 #include "ns3/ipv4-l3-protocol.h"
 #include "ns3/ipv6-l3-protocol.h"
--- a/src/internet/test/tcp-wscaling-test.cc	Sun Jun 14 22:30:44 2015 +0200
+++ b/src/internet/test/tcp-wscaling-test.cc	Thu Jul 02 18:21:44 2015 +0200
@@ -39,7 +39,6 @@
 #include "ns3/uinteger.h"
 #include "ns3/log.h"
 
-#include "ns3/ipv4-end-point.h"
 #include "ns3/arp-l3-protocol.h"
 #include "ns3/ipv4-l3-protocol.h"
 #include "ns3/ipv6-l3-protocol.h"
--- a/src/internet/wscript	Sun Jun 14 22:30:44 2015 +0200
+++ b/src/internet/wscript	Thu Jul 02 18:21:44 2015 +0200
@@ -263,7 +263,6 @@
         'model/ipv4-interface.h',
         'model/ipv4-l3-protocol.h',
         'model/ipv6-l3-protocol.h',
-        'model/ipv4-end-point.h',
         'model/ipv6-extension.h',
         'model/ipv6-extension-demux.h',
         'model/ipv6-extension-header.h',