diff -r 084b07dceafb src/internet-node/udp-socket.cc --- a/src/internet-node/udp-socket.cc Mon Feb 11 14:46:44 2008 +0000 +++ b/src/internet-node/udp-socket.cc Tue Feb 12 12:08:31 2008 +0000 @@ -388,27 +388,43 @@ UdpSocketTest::RunTests (void) // Receiver Node Ptr rxNode = CreateObject (); - Ptr rxDev = CreateObject (rxNode); - rxDev->AddQueue(CreateObject ()); - Ptr ipv4 = rxNode->GetObject (); - uint32_t netdev_idx = ipv4->AddInterface (rxDev); - ipv4->SetAddress (netdev_idx, Ipv4Address ("10.0.0.1")); - ipv4->SetNetworkMask (netdev_idx, Ipv4Mask (0xffff0000U)); - ipv4->SetUp (netdev_idx); + Ptr rxDev1, rxDev2; + { // first interface + rxDev1 = CreateObject (rxNode); + rxDev1->AddQueue(CreateObject ()); + Ptr ipv4 = rxNode->GetObject (); + uint32_t netdev_idx = ipv4->AddInterface (rxDev1); + ipv4->SetAddress (netdev_idx, Ipv4Address ("10.0.0.1")); + ipv4->SetNetworkMask (netdev_idx, Ipv4Mask (0xffff0000U)); + ipv4->SetUp (netdev_idx); + } + { // second interface + rxDev2 = CreateObject (rxNode); + rxDev2->AddQueue(CreateObject ()); + Ptr ipv4 = rxNode->GetObject (); + uint32_t netdev_idx = ipv4->AddInterface (rxDev2); + ipv4->SetAddress (netdev_idx, Ipv4Address ("10.0.1.1")); + ipv4->SetNetworkMask (netdev_idx, Ipv4Mask (0xffff0000U)); + ipv4->SetUp (netdev_idx); + } + // Sender Node Ptr txNode = CreateObject (); - Ptr txDev = CreateObject (txNode); - txDev->AddQueue(CreateObject ()); - ipv4 = txNode->GetObject (); - netdev_idx = ipv4->AddInterface (txDev); - ipv4->SetAddress (netdev_idx, Ipv4Address ("10.0.0.2")); - ipv4->SetNetworkMask (netdev_idx, Ipv4Mask (0xffff0000U)); - ipv4->SetUp (netdev_idx); + Ptr txDev; + { + txDev = CreateObject (txNode); + txDev->AddQueue(CreateObject ()); + Ptr ipv4 = txNode->GetObject (); + uint32_t netdev_idx = ipv4->AddInterface (txDev); + ipv4->SetAddress (netdev_idx, Ipv4Address ("10.0.0.2")); + ipv4->SetNetworkMask (netdev_idx, Ipv4Mask (0xffff0000U)); + ipv4->SetUp (netdev_idx); + } // link the two nodes Ptr channel = CreateObject (); - rxDev->Attach (channel); + rxDev1->Attach (channel); txDev->Attach (channel); @@ -417,6 +433,10 @@ UdpSocketTest::RunTests (void) Ptr rxSocket = rxSocketFactory->CreateSocket (); NS_TEST_ASSERT_EQUAL (rxSocket->Bind (InetSocketAddress (Ipv4Address ("10.0.0.2"), 1234)), 0); rxSocket->SetRecvCallback (MakeCallback (&UdpSocketTest::ReceivePacket, this)); + + Ptr rxSocket2 = rxSocketFactory->CreateSocket (); + rxSocket2->SetRecvCallback (MakeCallback (&UdpSocketTest::ReceivePacket2, this)); + NS_TEST_ASSERT_EQUAL (rxSocket2->Bind (InetSocketAddress (Ipv4Address ("10.0.1.1"), 1234)), 0); Ptr txSocketFactory = txNode->GetObject (); Ptr txSocket = txSocketFactory->CreateSocket (); @@ -425,26 +445,33 @@ UdpSocketTest::RunTests (void) // Unicast test m_receivedPacket = Create (); + m_receivedPacket2 = Create (); NS_TEST_ASSERT_EQUAL (txSocket->SendTo (InetSocketAddress (Ipv4Address("10.0.0.1"), 1234), Create (123)), 0); Simulator::Run (); NS_TEST_ASSERT_EQUAL (m_receivedPacket->GetSize (), 123); + NS_TEST_ASSERT_EQUAL (m_receivedPacket2->GetSize (), 0); // second interface should receive it // Simple broadcast test m_receivedPacket = Create (); + m_receivedPacket2 = Create (); NS_TEST_ASSERT_EQUAL (txSocket->SendTo (InetSocketAddress (Ipv4Address("255.255.255.255"), 1234), Create (123)), 0); Simulator::Run (); NS_TEST_ASSERT_EQUAL (m_receivedPacket->GetSize (), 123); + // second socket should not receive it (it is bound specifically to the second interface's address + NS_TEST_ASSERT_EQUAL (m_receivedPacket2->GetSize (), 0); // Broadcast test with multiple receiving sockets // When receiving broadcast packets, all sockets sockets bound to - // the address/port should receive a copy of the same packet. - Ptr rxSocket2 = rxSocketFactory->CreateSocket (); + // the address/port should receive a copy of the same packet -- if + // the socket address matches. + rxSocket2->Dispose (); + rxSocket2 = rxSocketFactory->CreateSocket (); rxSocket2->SetRecvCallback (MakeCallback (&UdpSocketTest::ReceivePacket2, this)); NS_TEST_ASSERT_EQUAL (rxSocket2->Bind (InetSocketAddress (Ipv4Address ("0.0.0.0"), 1234)), 0);