|
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)) |