From 3d47c1076d6f8fc6aa37b2f64203131f522a8ffb Mon Sep 17 00:00:00 2001 From: Borovkova Elena Date: Mon, 17 Aug 2009 11:23:50 +0400 Subject: [PATCH] RoutingProtocol::NotifyInterfaceUp added --- examples/wscript | 5 ++++- src/routing/aodv/aodv-routing-protocol.cc | 20 ++++++++++++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/examples/wscript b/examples/wscript index 25c62b588..774ebf5c0 100644 --- a/examples/wscript +++ b/examples/wscript @@ -9,7 +9,10 @@ def build(bld): obj = bld.create_ns3_program('aodv_crash') obj.source = 'aodv_random_disc.cc' - + + obj = bld.create_ns3_program('aodv-with-interface-down') + obj.source = 'aodv-with-interface-down.cc' + # obj = bld.create_ns3_program('hello-simulator') # obj.source = 'hello-simulator.cc' # diff --git a/src/routing/aodv/aodv-routing-protocol.cc b/src/routing/aodv/aodv-routing-protocol.cc index a3d3e48ee..24797ff09 100644 --- a/src/routing/aodv/aodv-routing-protocol.cc +++ b/src/routing/aodv/aodv-routing-protocol.cc @@ -220,7 +220,6 @@ RoutingProtocol::Start () continue; // Create a socket to listen only on this interface - Ptr l3 = m_ipv4->GetObject (); Ptr socket = l3->CreateRawSocket2(); NS_ASSERT (socket != 0); @@ -435,7 +434,24 @@ RoutingProtocol::SetIpv4 (Ptr ipv4) void RoutingProtocol::NotifyInterfaceUp (uint32_t i ) { - // TODO + NS_LOG_FUNCTION (this << i); + Ipv4InterfaceAddress iface = m_ipv4->GetAddress (i, 0); + if (iface.GetLocal () == Ipv4Address ("127.0.0.1")) + return; + // Create a socket to listen only on this interface + Ptr l3 = m_ipv4->GetObject (); + Ptr socket = l3->CreateRawSocket2(); + NS_ASSERT (socket != 0); + socket->SetRecvCallback (MakeCallback (&RoutingProtocol::RecvAodv, this)); + socket->Bind(InetSocketAddress (iface.GetLocal(), AODV_PORT)); + socket->Connect (InetSocketAddress (iface.GetBroadcast(), AODV_PORT)); + m_socketAddresses.insert (std::make_pair (socket, iface)); + + // Add local broadcast record to the routing table + Ptr dev = m_ipv4->GetNetDevice (m_ipv4->GetInterfaceForAddress (iface.GetLocal ())); + RoutingTableEntry rt (/*device=*/dev, /*dst=*/iface.GetBroadcast (), /*know seqno=*/true, /*seqno=*/0, /*iface=*/iface, + /*hops=*/1, /*next hop=*/iface.GetBroadcast (), /*lifetime=*/Seconds (1e9)); // TODO use infty + m_routingTable.AddRoute (rt); } void