View | Details | Raw Unified | Return to bug 2123
Collapse All | Expand All

(-)model/aodv-routing-protocol.cc (-14 / +121 lines)
 Lines 119-124   NS_OBJECT_ENSURE_REGISTERED (DeferredRou Link Here 
119
//-----------------------------------------------------------------------------
119
//-----------------------------------------------------------------------------
120
RoutingProtocol::RoutingProtocol () :
120
RoutingProtocol::RoutingProtocol () :
121
  RreqRetries (2),
121
  RreqRetries (2),
122
  TtlStart (1),
123
  TtlIncrement (2),
124
  TtlThreshold (7),
125
  TimeoutBuffer (2),
122
  RreqRateLimit (10),
126
  RreqRateLimit (10),
123
  RerrRateLimit (10),
127
  RerrRateLimit (10),
124
  ActiveRouteTimeout (Seconds (3)),
128
  ActiveRouteTimeout (Seconds (3)),
 Lines 165-170   RoutingProtocol::GetTypeId (void) Link Here 
165
                   TimeValue (Seconds (1)),
169
                   TimeValue (Seconds (1)),
166
                   MakeTimeAccessor (&RoutingProtocol::HelloInterval),
170
                   MakeTimeAccessor (&RoutingProtocol::HelloInterval),
167
                   MakeTimeChecker ())
171
                   MakeTimeChecker ())
172
    .AddAttribute ("TtlStart", "Initial TTL value for RREQ.",
173
	           UintegerValue (1),
174
	           MakeUintegerAccessor (&RoutingProtocol::TtlStart),
175
	           MakeUintegerChecker<uint16_t> ())
176
    .AddAttribute ("TtlIncrement", "TTL increment for each attempt using the expanding ring search for RREQ dissemination.",
177
	           UintegerValue (2),
178
	           MakeUintegerAccessor (&RoutingProtocol::TtlIncrement),
179
	           MakeUintegerChecker<uint16_t> ())
180
    .AddAttribute ("TtlThreshold", "Maximum TTL value for expanding ring search, TTL = NetDiameter is used beyond this value.",
181
	           UintegerValue (7),
182
	           MakeUintegerAccessor (&RoutingProtocol::TtlThreshold),
183
	           MakeUintegerChecker<uint16_t> ())
184
    .AddAttribute ("TimeoutBuffer", "Provide a buffer for the timeout.",
185
	           UintegerValue (2),
186
	           MakeUintegerAccessor (&RoutingProtocol::TimeoutBuffer),
187
	           MakeUintegerChecker<uint16_t> ())
168
    .AddAttribute ("RreqRetries", "Maximum number of retransmissions of RREQ to discover a route",
188
    .AddAttribute ("RreqRetries", "Maximum number of retransmissions of RREQ to discover a route",
169
                   UintegerValue (2),
189
                   UintegerValue (2),
170
                   MakeUintegerAccessor (&RoutingProtocol::RreqRetries),
190
                   MakeUintegerAccessor (&RoutingProtocol::RreqRetries),
 Lines 476-481   RoutingProtocol::RouteInput (Ptr<const P Link Here 
476
              {
496
              {
477
                return true;
497
                return true;
478
              }
498
              }
499
            TypeHeader aodvHeader;
500
            p->PeekHeader (aodvHeader);
501
            if (aodvHeader.IsValid ())
502
              {
503
                // AODV packets sent in broadcast are managed by LocalDeliver callback
504
                return true;
505
              }
479
            if (header.GetTtl () > 1)
506
            if (header.GetTtl () > 1)
480
              {
507
              {
481
                NS_LOG_LOGIC ("Forward broadcast. TTL " << (uint16_t) header.GetTtl ());
508
                NS_LOG_LOGIC ("Forward broadcast. TTL " << (uint16_t) header.GetTtl ());
 Lines 632-638   RoutingProtocol::NotifyInterfaceUp (uint Link Here 
632
  socket->Bind (InetSocketAddress (iface.GetLocal (), AODV_PORT));
659
  socket->Bind (InetSocketAddress (iface.GetLocal (), AODV_PORT));
633
  socket->BindToNetDevice (l3->GetNetDevice (i));
660
  socket->BindToNetDevice (l3->GetNetDevice (i));
634
  socket->SetAllowBroadcast (true);
661
  socket->SetAllowBroadcast (true);
635
  socket->SetAttribute ("IpTtl", UintegerValue (1));
662
  socket->SetIpRecvTtl (true);
636
  m_socketAddresses.insert (std::make_pair (socket, iface));
663
  m_socketAddresses.insert (std::make_pair (socket, iface));
637
664
638
  // create also a subnet broadcast socket
665
  // create also a subnet broadcast socket
 Lines 643-649   RoutingProtocol::NotifyInterfaceUp (uint Link Here 
643
  socket->Bind (InetSocketAddress (iface.GetBroadcast (), AODV_PORT));
670
  socket->Bind (InetSocketAddress (iface.GetBroadcast (), AODV_PORT));
644
  socket->BindToNetDevice (l3->GetNetDevice (i));
671
  socket->BindToNetDevice (l3->GetNetDevice (i));
645
  socket->SetAllowBroadcast (true);
672
  socket->SetAllowBroadcast (true);
646
  socket->SetAttribute ("IpTtl", UintegerValue (1));
673
  socket->SetIpRecvTtl (true);
647
  m_socketSubnetBroadcastAddresses.insert (std::make_pair (socket, iface));
674
  m_socketSubnetBroadcastAddresses.insert (std::make_pair (socket, iface));
648
675
649
  // Add local broadcast record to the routing table
676
  // Add local broadcast record to the routing table
 Lines 744-750   RoutingProtocol::NotifyAddAddress (uint3 Link Here 
744
          socket->Bind (InetSocketAddress (iface.GetBroadcast (), AODV_PORT));
771
          socket->Bind (InetSocketAddress (iface.GetBroadcast (), AODV_PORT));
745
          socket->BindToNetDevice (l3->GetNetDevice (i));
772
          socket->BindToNetDevice (l3->GetNetDevice (i));
746
          socket->SetAllowBroadcast (true);
773
          socket->SetAllowBroadcast (true);
747
          socket->SetAttribute ("IpTtl", UintegerValue (1));
774
          socket->SetIpRecvTtl (true);
748
          m_socketSubnetBroadcastAddresses.insert (std::make_pair (socket, iface));
775
          m_socketSubnetBroadcastAddresses.insert (std::make_pair (socket, iface));
749
776
750
          // Add local broadcast record to the routing table
777
          // Add local broadcast record to the routing table
 Lines 793-799   RoutingProtocol::NotifyRemoveAddress (ui Link Here 
793
          socket->Bind (InetSocketAddress (iface.GetLocal (), AODV_PORT));
820
          socket->Bind (InetSocketAddress (iface.GetLocal (), AODV_PORT));
794
          socket->BindToNetDevice (l3->GetNetDevice (i));
821
          socket->BindToNetDevice (l3->GetNetDevice (i));
795
          socket->SetAllowBroadcast (true);
822
          socket->SetAllowBroadcast (true);
796
          socket->SetAttribute ("IpTtl", UintegerValue (1));
823
          socket->SetIpRecvTtl (true);
797
          m_socketAddresses.insert (std::make_pair (socket, iface));
824
          m_socketAddresses.insert (std::make_pair (socket, iface));
798
825
799
          // create also a unicast socket
826
          // create also a unicast socket
 Lines 804-810   RoutingProtocol::NotifyRemoveAddress (ui Link Here 
804
          socket->Bind (InetSocketAddress (iface.GetBroadcast (), AODV_PORT));
831
          socket->Bind (InetSocketAddress (iface.GetBroadcast (), AODV_PORT));
805
          socket->BindToNetDevice (l3->GetNetDevice (i));
832
          socket->BindToNetDevice (l3->GetNetDevice (i));
806
          socket->SetAllowBroadcast (true);
833
          socket->SetAllowBroadcast (true);
807
          socket->SetAttribute ("IpTtl", UintegerValue (1));
834
          socket->SetIpRecvTtl (true);
808
          m_socketSubnetBroadcastAddresses.insert (std::make_pair (socket, iface));
835
          m_socketSubnetBroadcastAddresses.insert (std::make_pair (socket, iface));
809
836
810
          // Add local broadcast record to the routing table
837
          // Add local broadcast record to the routing table
 Lines 910-923   RoutingProtocol::SendRequest (Ipv4Addres Link Here 
910
  rreqHeader.SetDst (dst);
937
  rreqHeader.SetDst (dst);
911
938
912
  RoutingTableEntry rt;
939
  RoutingTableEntry rt;
940
  // Using the Hop field in Routing Table to manage the expanding ring search
941
  uint16_t ttl = TtlStart;
913
  if (m_routingTable.LookupRoute (dst, rt))
942
  if (m_routingTable.LookupRoute (dst, rt))
914
    {
943
    {
915
      rreqHeader.SetHopCount (rt.GetHop ());
944
      if (rt.GetFlag () != IN_SEARCH)
945
        {
946
	  ttl = std::min<uint16_t> (rt.GetHop () + TtlIncrement, NetDiameter);
947
  	}
948
      else
949
  	{
950
  	  ttl = rt.GetHop () + TtlIncrement;
951
  	  if (ttl > TtlThreshold)
952
  	    ttl = NetDiameter;
953
  	}
954
      if (ttl == NetDiameter)
955
  	rt.IncrementRreqCnt ();
916
      if (rt.GetValidSeqNo ())
956
      if (rt.GetValidSeqNo ())
917
        rreqHeader.SetDstSeqno (rt.GetSeqNo ());
957
        rreqHeader.SetDstSeqno (rt.GetSeqNo ());
918
      else
958
      else
919
        rreqHeader.SetUnknownSeqno (true);
959
        rreqHeader.SetUnknownSeqno (true);
960
      rt.SetHop (ttl);
920
      rt.SetFlag (IN_SEARCH);
961
      rt.SetFlag (IN_SEARCH);
962
      rt.SetLifeTime (PathDiscoveryTime);
921
      m_routingTable.Update (rt);
963
      m_routingTable.Update (rt);
922
    }
964
    }
923
  else
965
  else
 Lines 925-932   RoutingProtocol::SendRequest (Ipv4Addres Link Here 
925
      rreqHeader.SetUnknownSeqno (true);
967
      rreqHeader.SetUnknownSeqno (true);
926
      Ptr<NetDevice> dev = 0;
968
      Ptr<NetDevice> dev = 0;
927
      RoutingTableEntry newEntry (/*device=*/ dev, /*dst=*/ dst, /*validSeqNo=*/ false, /*seqno=*/ 0,
969
      RoutingTableEntry newEntry (/*device=*/ dev, /*dst=*/ dst, /*validSeqNo=*/ false, /*seqno=*/ 0,
928
                                              /*iface=*/ Ipv4InterfaceAddress (),/*hop=*/ 0,
970
                                              /*iface=*/ Ipv4InterfaceAddress (),/*hop=*/ ttl,
929
                                              /*nextHop=*/ Ipv4Address (), /*lifeTime=*/ Seconds (0));
971
                                              /*nextHop=*/ Ipv4Address (), /*lifeTime=*/ PathDiscoveryTime);
972
      // Check if TtlStart == NetDiameter
973
      if (ttl == NetDiameter)
974
        newEntry.IncrementRreqCnt ();
930
      newEntry.SetFlag (IN_SEARCH);
975
      newEntry.SetFlag (IN_SEARCH);
931
      m_routingTable.AddRoute (newEntry);
976
      m_routingTable.AddRoute (newEntry);
932
    }
977
    }
 Lines 953-958   RoutingProtocol::SendRequest (Ipv4Addres Link Here 
953
      m_rreqIdCache.IsDuplicate (iface.GetLocal (), m_requestId);
998
      m_rreqIdCache.IsDuplicate (iface.GetLocal (), m_requestId);
954
999
955
      Ptr<Packet> packet = Create<Packet> ();
1000
      Ptr<Packet> packet = Create<Packet> ();
1001
      SocketIpTtlTag tag;
1002
      tag.SetTtl (ttl);
1003
      packet->AddPacketTag (tag);
956
      packet->AddHeader (rreqHeader);
1004
      packet->AddHeader (rreqHeader);
957
      TypeHeader tHeader (AODVTYPE_RREQ);
1005
      TypeHeader tHeader (AODVTYPE_RREQ);
958
      packet->AddHeader (tHeader);
1006
      packet->AddHeader (tHeader);
 Lines 993-1002   RoutingProtocol::ScheduleRreqRetry (Ipv4 Link Here 
993
  m_addressReqTimer[dst].SetArguments (dst);
1041
  m_addressReqTimer[dst].SetArguments (dst);
994
  RoutingTableEntry rt;
1042
  RoutingTableEntry rt;
995
  m_routingTable.LookupRoute (dst, rt);
1043
  m_routingTable.LookupRoute (dst, rt);
996
  rt.IncrementRreqCnt ();
1044
  Time retry;
997
  m_routingTable.Update (rt);
1045
  if (rt.GetHop () < NetDiameter)
998
  m_addressReqTimer[dst].Schedule (Time (rt.GetRreqCnt () * NetTraversalTime));
1046
    {
999
  NS_LOG_LOGIC ("Scheduled RREQ retry in " << Time (rt.GetRreqCnt () * NetTraversalTime).GetSeconds () << " seconds");
1047
      retry = 2 * NodeTraversalTime * (rt.GetHop () + TimeoutBuffer);
1048
    }
1049
  else
1050
    {
1051
      // Binary exponential backoff
1052
      retry = std::pow<uint16_t> (2, rt.GetRreqCnt () - 1) * NetTraversalTime;
1053
    }
1054
  m_addressReqTimer[dst].Schedule (retry);
1055
  NS_LOG_LOGIC ("Scheduled RREQ retry in " << retry.GetSeconds () << " seconds");
1000
}
1056
}
1001
1057
1002
void
1058
void
 Lines 1254-1265   RoutingProtocol::RecvRequest (Ptr<Packet Link Here 
1254
        }
1310
        }
1255
    }
1311
    }
1256
1312
1313
  SocketIpTtlTag tag;
1314
  p->RemovePacketTag (tag);
1315
  if (tag.GetTtl () < 2)
1316
    {
1317
      NS_LOG_DEBUG ("TTL exceeded. Drop RREQ origin " << src << " destination " << dst );
1318
      return;
1319
    }
1320
1257
  for (std::map<Ptr<Socket>, Ipv4InterfaceAddress>::const_iterator j =
1321
  for (std::map<Ptr<Socket>, Ipv4InterfaceAddress>::const_iterator j =
1258
         m_socketAddresses.begin (); j != m_socketAddresses.end (); ++j)
1322
         m_socketAddresses.begin (); j != m_socketAddresses.end (); ++j)
1259
    {
1323
    {
1260
      Ptr<Socket> socket = j->first;
1324
      Ptr<Socket> socket = j->first;
1261
      Ipv4InterfaceAddress iface = j->second;
1325
      Ipv4InterfaceAddress iface = j->second;
1262
      Ptr<Packet> packet = Create<Packet> ();
1326
      Ptr<Packet> packet = Create<Packet> ();
1327
      SocketIpTtlTag ttl;
1328
      ttl.SetTtl (tag.GetTtl () - 1);
1329
      packet->AddPacketTag (ttl);
1263
      packet->AddHeader (rreqHeader);
1330
      packet->AddHeader (rreqHeader);
1264
      TypeHeader tHeader (AODVTYPE_RREQ);
1331
      TypeHeader tHeader (AODVTYPE_RREQ);
1265
      packet->AddHeader (tHeader);
1332
      packet->AddHeader (tHeader);
 Lines 1292-1297   RoutingProtocol::SendReply (RreqHeader c Link Here 
1292
  RrepHeader rrepHeader ( /*prefixSize=*/ 0, /*hops=*/ 0, /*dst=*/ rreqHeader.GetDst (),
1359
  RrepHeader rrepHeader ( /*prefixSize=*/ 0, /*hops=*/ 0, /*dst=*/ rreqHeader.GetDst (),
1293
                                          /*dstSeqNo=*/ m_seqNo, /*origin=*/ toOrigin.GetDestination (), /*lifeTime=*/ MyRouteTimeout);
1360
                                          /*dstSeqNo=*/ m_seqNo, /*origin=*/ toOrigin.GetDestination (), /*lifeTime=*/ MyRouteTimeout);
1294
  Ptr<Packet> packet = Create<Packet> ();
1361
  Ptr<Packet> packet = Create<Packet> ();
1362
  SocketIpTtlTag tag;
1363
  tag.SetTtl (toOrigin.GetHop ());
1364
  packet->AddPacketTag (tag);
1295
  packet->AddHeader (rrepHeader);
1365
  packet->AddHeader (rrepHeader);
1296
  TypeHeader tHeader (AODVTYPE_RREP);
1366
  TypeHeader tHeader (AODVTYPE_RREP);
1297
  packet->AddHeader (tHeader);
1367
  packet->AddHeader (tHeader);
 Lines 1324-1329   RoutingProtocol::SendReplyByIntermediate Link Here 
1324
  m_routingTable.Update (toOrigin);
1394
  m_routingTable.Update (toOrigin);
1325
1395
1326
  Ptr<Packet> packet = Create<Packet> ();
1396
  Ptr<Packet> packet = Create<Packet> ();
1397
  SocketIpTtlTag tag;
1398
  tag.SetTtl (toOrigin.GetHop ());
1399
  packet->AddPacketTag (tag);
1327
  packet->AddHeader (rrepHeader);
1400
  packet->AddHeader (rrepHeader);
1328
  TypeHeader tHeader (AODVTYPE_RREP);
1401
  TypeHeader tHeader (AODVTYPE_RREP);
1329
  packet->AddHeader (tHeader);
1402
  packet->AddHeader (tHeader);
 Lines 1338-1343   RoutingProtocol::SendReplyByIntermediate Link Here 
1338
                                                 /*dst seqno=*/ toOrigin.GetSeqNo (), /*origin=*/ toDst.GetDestination (),
1411
                                                 /*dst seqno=*/ toOrigin.GetSeqNo (), /*origin=*/ toDst.GetDestination (),
1339
                                                 /*lifetime=*/ toOrigin.GetLifeTime ());
1412
                                                 /*lifetime=*/ toOrigin.GetLifeTime ());
1340
      Ptr<Packet> packetToDst = Create<Packet> ();
1413
      Ptr<Packet> packetToDst = Create<Packet> ();
1414
      SocketIpTtlTag gratTag;
1415
      gratTag.SetTtl (toDst.GetHop ());
1416
      packetToDst->AddPacketTag (gratTag);
1341
      packetToDst->AddHeader (gratRepHeader);
1417
      packetToDst->AddHeader (gratRepHeader);
1342
      TypeHeader type (AODVTYPE_RREP);
1418
      TypeHeader type (AODVTYPE_RREP);
1343
      packetToDst->AddHeader (type);
1419
      packetToDst->AddHeader (type);
 Lines 1355-1360   RoutingProtocol::SendReplyAck (Ipv4Addre Link Here 
1355
  RrepAckHeader h;
1431
  RrepAckHeader h;
1356
  TypeHeader typeHeader (AODVTYPE_RREP_ACK);
1432
  TypeHeader typeHeader (AODVTYPE_RREP_ACK);
1357
  Ptr<Packet> packet = Create<Packet> ();
1433
  Ptr<Packet> packet = Create<Packet> ();
1434
  SocketIpTtlTag tag;
1435
  tag.SetTtl (1);
1436
  packet->AddPacketTag (tag);
1358
  packet->AddHeader (h);
1437
  packet->AddHeader (h);
1359
  packet->AddHeader (typeHeader);
1438
  packet->AddHeader (typeHeader);
1360
  RoutingTableEntry toNeighbor;
1439
  RoutingTableEntry toNeighbor;
 Lines 1480-1487   RoutingProtocol::RecvReply (Ptr<Packet> Link Here 
1480
      toNextHopToOrigin.InsertPrecursor (toDst.GetNextHop ());
1559
      toNextHopToOrigin.InsertPrecursor (toDst.GetNextHop ());
1481
      m_routingTable.Update (toNextHopToOrigin);
1560
      m_routingTable.Update (toNextHopToOrigin);
1482
    }
1561
    }
1562
  SocketIpTtlTag tag;
1563
  p->RemovePacketTag(tag);
1564
  if (tag.GetTtl () < 2)
1565
    {
1566
      NS_LOG_DEBUG ("TTL exceeded. Drop RREP destination " << dst << " origin " << rrepHeader.GetOrigin ());
1567
      return;
1568
    }
1483
1569
1484
  Ptr<Packet> packet = Create<Packet> ();
1570
  Ptr<Packet> packet = Create<Packet> ();
1571
  SocketIpTtlTag ttl;
1572
  ttl.SetTtl (tag.GetTtl() - 1);
1573
  packet->AddPacketTag (ttl);
1485
  packet->AddHeader (rrepHeader);
1574
  packet->AddHeader (rrepHeader);
1486
  TypeHeader tHeader (AODVTYPE_RREP);
1575
  TypeHeader tHeader (AODVTYPE_RREP);
1487
  packet->AddHeader (tHeader);
1576
  packet->AddHeader (tHeader);
 Lines 1569-1574   RoutingProtocol::RecvError (Ptr<Packet> Link Here 
1569
        {
1658
        {
1570
          TypeHeader typeHeader (AODVTYPE_RERR);
1659
          TypeHeader typeHeader (AODVTYPE_RERR);
1571
          Ptr<Packet> packet = Create<Packet> ();
1660
          Ptr<Packet> packet = Create<Packet> ();
1661
          SocketIpTtlTag tag;
1662
          tag.SetTtl (1);
1663
          packet->AddPacketTag (tag);
1572
          packet->AddHeader (rerrHeader);
1664
          packet->AddHeader (rerrHeader);
1573
          packet->AddHeader (typeHeader);
1665
          packet->AddHeader (typeHeader);
1574
          SendRerrMessage (packet, precursors);
1666
          SendRerrMessage (packet, precursors);
 Lines 1586-1591   RoutingProtocol::RecvError (Ptr<Packet> Link Here 
1586
    {
1678
    {
1587
      TypeHeader typeHeader (AODVTYPE_RERR);
1679
      TypeHeader typeHeader (AODVTYPE_RERR);
1588
      Ptr<Packet> packet = Create<Packet> ();
1680
      Ptr<Packet> packet = Create<Packet> ();
1681
      SocketIpTtlTag tag;
1682
      tag.SetTtl (1);
1683
      packet->AddPacketTag (tag);
1589
      packet->AddHeader (rerrHeader);
1684
      packet->AddHeader (rerrHeader);
1590
      packet->AddHeader (typeHeader);
1685
      packet->AddHeader (typeHeader);
1591
      SendRerrMessage (packet, precursors);
1686
      SendRerrMessage (packet, precursors);
 Lines 1611-1617   RoutingProtocol::RouteRequestTimerExpire Link Here 
1611
   */
1706
   */
1612
  if (toDst.GetRreqCnt () == RreqRetries)
1707
  if (toDst.GetRreqCnt () == RreqRetries)
1613
    {
1708
    {
1614
      NS_LOG_LOGIC ("route discovery to " << dst << " has been attempted RreqRetries (" << RreqRetries << ") times");
1709
      NS_LOG_LOGIC ("route discovery to " << dst << " has been attempted RreqRetries (" << RreqRetries << ") times with ttl " << NetDiameter);
1615
      m_addressReqTimer.erase (dst);
1710
      m_addressReqTimer.erase (dst);
1616
      m_routingTable.DeleteRoute (dst);
1711
      m_routingTable.DeleteRoute (dst);
1617
      NS_LOG_DEBUG ("Route not found. Drop all packets with dst " << dst);
1712
      NS_LOG_DEBUG ("Route not found. Drop all packets with dst " << dst);
 Lines 1621-1627   RoutingProtocol::RouteRequestTimerExpire Link Here 
1621
1716
1622
  if (toDst.GetFlag () == IN_SEARCH)
1717
  if (toDst.GetFlag () == IN_SEARCH)
1623
    {
1718
    {
1624
      NS_LOG_LOGIC ("Resend RREQ to " << dst << " ttl " << NetDiameter);
1719
      NS_LOG_LOGIC ("Resend RREQ to " << dst << " previous ttl " << toDst.GetHop ());
1625
      SendRequest (dst);
1720
      SendRequest (dst);
1626
    }
1721
    }
1627
  else
1722
  else
 Lines 1693-1698   RoutingProtocol::SendHello () Link Here 
1693
      RrepHeader helloHeader (/*prefix size=*/ 0, /*hops=*/ 0, /*dst=*/ iface.GetLocal (), /*dst seqno=*/ m_seqNo,
1788
      RrepHeader helloHeader (/*prefix size=*/ 0, /*hops=*/ 0, /*dst=*/ iface.GetLocal (), /*dst seqno=*/ m_seqNo,
1694
                                               /*origin=*/ iface.GetLocal (),/*lifetime=*/ Time (AllowedHelloLoss * HelloInterval));
1789
                                               /*origin=*/ iface.GetLocal (),/*lifetime=*/ Time (AllowedHelloLoss * HelloInterval));
1695
      Ptr<Packet> packet = Create<Packet> ();
1790
      Ptr<Packet> packet = Create<Packet> ();
1791
      SocketIpTtlTag tag;
1792
      tag.SetTtl (1);
1793
      packet->AddPacketTag (tag);
1696
      packet->AddHeader (helloHeader);
1794
      packet->AddHeader (helloHeader);
1697
      TypeHeader tHeader (AODVTYPE_RREP);
1795
      TypeHeader tHeader (AODVTYPE_RREP);
1698
      packet->AddHeader (tHeader);
1796
      packet->AddHeader (tHeader);
 Lines 1757-1762   RoutingProtocol::SendRerrWhenBreaksLinkT Link Here 
1757
          NS_LOG_LOGIC ("Send RERR message with maximum size.");
1855
          NS_LOG_LOGIC ("Send RERR message with maximum size.");
1758
          TypeHeader typeHeader (AODVTYPE_RERR);
1856
          TypeHeader typeHeader (AODVTYPE_RERR);
1759
          Ptr<Packet> packet = Create<Packet> ();
1857
          Ptr<Packet> packet = Create<Packet> ();
1858
          SocketIpTtlTag tag;
1859
          tag.SetTtl (1);
1860
          packet->AddPacketTag (tag);
1760
          packet->AddHeader (rerrHeader);
1861
          packet->AddHeader (rerrHeader);
1761
          packet->AddHeader (typeHeader);
1862
          packet->AddHeader (typeHeader);
1762
          SendRerrMessage (packet, precursors);
1863
          SendRerrMessage (packet, precursors);
 Lines 1774-1779   RoutingProtocol::SendRerrWhenBreaksLinkT Link Here 
1774
    {
1875
    {
1775
      TypeHeader typeHeader (AODVTYPE_RERR);
1876
      TypeHeader typeHeader (AODVTYPE_RERR);
1776
      Ptr<Packet> packet = Create<Packet> ();
1877
      Ptr<Packet> packet = Create<Packet> ();
1878
      SocketIpTtlTag tag;
1879
      tag.SetTtl (1);
1880
      packet->AddPacketTag (tag);
1777
      packet->AddHeader (rerrHeader);
1881
      packet->AddHeader (rerrHeader);
1778
      packet->AddHeader (typeHeader);
1882
      packet->AddHeader (typeHeader);
1779
      SendRerrMessage (packet, precursors);
1883
      SendRerrMessage (packet, precursors);
 Lines 1802-1807   RoutingProtocol::SendRerrWhenNoRouteToFo Link Here 
1802
  rerrHeader.AddUnDestination (dst, dstSeqNo);
1906
  rerrHeader.AddUnDestination (dst, dstSeqNo);
1803
  RoutingTableEntry toOrigin;
1907
  RoutingTableEntry toOrigin;
1804
  Ptr<Packet> packet = Create<Packet> ();
1908
  Ptr<Packet> packet = Create<Packet> ();
1909
  SocketIpTtlTag tag;
1910
  tag.SetTtl (1);
1911
  packet->AddPacketTag (tag);
1805
  packet->AddHeader (rerrHeader);
1912
  packet->AddHeader (rerrHeader);
1806
  packet->AddHeader (TypeHeader (AODVTYPE_RERR));
1913
  packet->AddHeader (TypeHeader (AODVTYPE_RERR));
1807
  if (m_routingTable.LookupValidRoute (origin, toOrigin))
1914
  if (m_routingTable.LookupValidRoute (origin, toOrigin))
(-)model/aodv-routing-protocol.h (-3 / +7 lines)
 Lines 103-108   private: Link Here 
103
  
103
  
104
  // Protocol parameters.
104
  // Protocol parameters.
105
  uint32_t RreqRetries;             ///< Maximum number of retransmissions of RREQ with TTL = NetDiameter to discover a route
105
  uint32_t RreqRetries;             ///< Maximum number of retransmissions of RREQ with TTL = NetDiameter to discover a route
106
  uint16_t TtlStart;                ///< Initial TTL value for RREQ.
107
  uint16_t TtlIncrement;            ///< TTL increment for each attempt using the expanding ring search for RREQ dissemination.
108
  uint16_t TtlThreshold;            ///< Maximum TTL value for expanding ring search, TTL = NetDiameter is used beyond this value.
109
  uint16_t TimeoutBuffer;           ///< Provide a buffer for the timeout.
106
  uint16_t RreqRateLimit;           ///< Maximum number of RREQ per second.
110
  uint16_t RreqRateLimit;           ///< Maximum number of RREQ per second.
107
  uint16_t RerrRateLimit;           ///< Maximum number of REER per second.
111
  uint16_t RerrRateLimit;           ///< Maximum number of REER per second.
108
  Time ActiveRouteTimeout;          ///< Period of time during which the route is considered to be valid.
112
  Time ActiveRouteTimeout;          ///< Period of time during which the route is considered to be valid.
 Lines 172-180   private: Link Here 
172
  /// If route exists and valid, forward packet.
176
  /// If route exists and valid, forward packet.
173
  bool Forwarding (Ptr<const Packet> p, const Ipv4Header & header, UnicastForwardCallback ucb, ErrorCallback ecb);
177
  bool Forwarding (Ptr<const Packet> p, const Ipv4Header & header, UnicastForwardCallback ucb, ErrorCallback ecb);
174
  /**
178
  /**
175
  * To reduce congestion in a network, repeated attempts by a source node at route discovery
179
   * Repeated attempts by a source node at route discovery for a single destination
176
  * for a single destination MUST utilize a binary exponential backoff.
180
   * use the expanding ring search technique.
177
  */
181
   */
178
  void ScheduleRreqRetry (Ipv4Address dst);
182
  void ScheduleRreqRetry (Ipv4Address dst);
179
  /**
183
  /**
180
   * Set lifetime field in routing table entry to the maximum of existing lifetime and lt, if the entry exists
184
   * Set lifetime field in routing table entry to the maximum of existing lifetime and lt, if the entry exists

Return to bug 2123