|
|
| 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)), |
|
|
| 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), |
|
|
| 619 |
socket->Bind (InetSocketAddress (Ipv4Address::GetAny (), AODV_PORT)); |
639 |
socket->Bind (InetSocketAddress (Ipv4Address::GetAny (), AODV_PORT)); |
| 620 |
socket->BindToNetDevice (l3->GetNetDevice (i)); |
640 |
socket->BindToNetDevice (l3->GetNetDevice (i)); |
| 621 |
socket->SetAllowBroadcast (true); |
641 |
socket->SetAllowBroadcast (true); |
| 622 |
socket->SetAttribute ("IpTtl", UintegerValue (1)); |
642 |
socket->SetIpRecvTtl(true); |
| 623 |
m_socketAddresses.insert (std::make_pair (socket, iface)); |
643 |
m_socketAddresses.insert (std::make_pair (socket, iface)); |
| 624 |
|
644 |
|
| 625 |
// create also a subnet broadcast socket |
645 |
// create also a subnet broadcast socket |
|
|
| 630 |
socket->Bind (InetSocketAddress (iface.GetBroadcast (), AODV_PORT)); |
650 |
socket->Bind (InetSocketAddress (iface.GetBroadcast (), AODV_PORT)); |
| 631 |
socket->BindToNetDevice (l3->GetNetDevice (i)); |
651 |
socket->BindToNetDevice (l3->GetNetDevice (i)); |
| 632 |
socket->SetAllowBroadcast (true); |
652 |
socket->SetAllowBroadcast (true); |
| 633 |
socket->SetAttribute ("IpTtl", UintegerValue (1)); |
653 |
socket->SetIpRecvTtl(true); |
| 634 |
m_socketSubnetBroadcastAddresses.insert (std::make_pair (socket, iface)); |
654 |
m_socketSubnetBroadcastAddresses.insert (std::make_pair (socket, iface)); |
| 635 |
|
655 |
|
| 636 |
// Add local broadcast record to the routing table |
656 |
// Add local broadcast record to the routing table |
|
|
| 780 |
socket->Bind (InetSocketAddress (iface.GetLocal (), AODV_PORT)); |
800 |
socket->Bind (InetSocketAddress (iface.GetLocal (), AODV_PORT)); |
| 781 |
socket->BindToNetDevice (l3->GetNetDevice (i)); |
801 |
socket->BindToNetDevice (l3->GetNetDevice (i)); |
| 782 |
socket->SetAllowBroadcast (true); |
802 |
socket->SetAllowBroadcast (true); |
| 783 |
socket->SetAttribute ("IpTtl", UintegerValue (1)); |
803 |
socket->SetIpRecvTtl(true); |
| 784 |
m_socketAddresses.insert (std::make_pair (socket, iface)); |
804 |
m_socketAddresses.insert (std::make_pair (socket, iface)); |
| 785 |
|
805 |
|
| 786 |
// create also a unicast socket |
806 |
// create also a unicast socket |
|
|
| 791 |
socket->Bind (InetSocketAddress (iface.GetBroadcast (), AODV_PORT)); |
811 |
socket->Bind (InetSocketAddress (iface.GetBroadcast (), AODV_PORT)); |
| 792 |
socket->BindToNetDevice (l3->GetNetDevice (i)); |
812 |
socket->BindToNetDevice (l3->GetNetDevice (i)); |
| 793 |
socket->SetAllowBroadcast (true); |
813 |
socket->SetAllowBroadcast (true); |
| 794 |
socket->SetAttribute ("IpTtl", UintegerValue (1)); |
814 |
socket->SetIpRecvTtl(true); |
| 795 |
m_socketSubnetBroadcastAddresses.insert (std::make_pair (socket, iface)); |
815 |
m_socketSubnetBroadcastAddresses.insert (std::make_pair (socket, iface)); |
| 796 |
|
816 |
|
| 797 |
// Add local broadcast record to the routing table |
817 |
// Add local broadcast record to the routing table |
|
|
| 897 |
rreqHeader.SetDst (dst); |
917 |
rreqHeader.SetDst (dst); |
| 898 |
|
918 |
|
| 899 |
RoutingTableEntry rt; |
919 |
RoutingTableEntry rt; |
|
|
920 |
// Using the Hop field in Routing Table to manage the expanding ring search |
| 921 |
uint16_t ttl = TtlStart; |
| 900 |
if (m_routingTable.LookupRoute (dst, rt)) |
922 |
if (m_routingTable.LookupRoute (dst, rt)) |
| 901 |
{ |
923 |
{ |
| 902 |
rreqHeader.SetHopCount (rt.GetHop ()); |
924 |
if (rt.GetFlag () != IN_SEARCH) |
|
|
925 |
{ |
| 926 |
ttl = std::min<uint16_t> (rt.GetHop () + TtlIncrement, NetDiameter); |
| 927 |
} |
| 928 |
else |
| 929 |
{ |
| 930 |
ttl = rt.GetHop () + TtlIncrement; |
| 931 |
if (ttl > TtlThreshold) |
| 932 |
ttl = NetDiameter; |
| 933 |
} |
| 934 |
if (ttl == NetDiameter) |
| 935 |
rt.IncrementRreqCnt (); |
| 903 |
if (rt.GetValidSeqNo ()) |
936 |
if (rt.GetValidSeqNo ()) |
| 904 |
rreqHeader.SetDstSeqno (rt.GetSeqNo ()); |
937 |
rreqHeader.SetDstSeqno (rt.GetSeqNo ()); |
| 905 |
else |
938 |
else |
| 906 |
rreqHeader.SetUnknownSeqno (true); |
939 |
rreqHeader.SetUnknownSeqno (true); |
|
|
940 |
rt.SetHop (ttl); |
| 907 |
rt.SetFlag (IN_SEARCH); |
941 |
rt.SetFlag (IN_SEARCH); |
| 908 |
m_routingTable.Update (rt); |
942 |
m_routingTable.Update (rt); |
| 909 |
} |
943 |
} |
|
|
| 912 |
rreqHeader.SetUnknownSeqno (true); |
946 |
rreqHeader.SetUnknownSeqno (true); |
| 913 |
Ptr<NetDevice> dev = 0; |
947 |
Ptr<NetDevice> dev = 0; |
| 914 |
RoutingTableEntry newEntry (/*device=*/ dev, /*dst=*/ dst, /*validSeqNo=*/ false, /*seqno=*/ 0, |
948 |
RoutingTableEntry newEntry (/*device=*/ dev, /*dst=*/ dst, /*validSeqNo=*/ false, /*seqno=*/ 0, |
| 915 |
/*iface=*/ Ipv4InterfaceAddress (),/*hop=*/ 0, |
949 |
/*iface=*/ Ipv4InterfaceAddress (),/*hop=*/ ttl, |
| 916 |
/*nextHop=*/ Ipv4Address (), /*lifeTime=*/ Seconds (0)); |
950 |
/*nextHop=*/ Ipv4Address (), /*lifeTime=*/ Seconds (0)); |
|
|
951 |
// Check if TtlStart == NetDiameter |
| 952 |
if (ttl == NetDiameter) |
| 953 |
newEntry.IncrementRreqCnt (); |
| 917 |
newEntry.SetFlag (IN_SEARCH); |
954 |
newEntry.SetFlag (IN_SEARCH); |
| 918 |
m_routingTable.AddRoute (newEntry); |
955 |
m_routingTable.AddRoute (newEntry); |
| 919 |
} |
956 |
} |
|
|
| 927 |
rreqHeader.SetOriginSeqno (m_seqNo); |
964 |
rreqHeader.SetOriginSeqno (m_seqNo); |
| 928 |
m_requestId++; |
965 |
m_requestId++; |
| 929 |
rreqHeader.SetId (m_requestId); |
966 |
rreqHeader.SetId (m_requestId); |
| 930 |
rreqHeader.SetHopCount (0); |
|
|
| 931 |
|
967 |
|
| 932 |
// Send RREQ as subnet directed broadcast from each interface used by aodv |
968 |
// Send RREQ as subnet directed broadcast from each interface used by aodv |
| 933 |
for (std::map<Ptr<Socket>, Ipv4InterfaceAddress>::const_iterator j = |
969 |
for (std::map<Ptr<Socket>, Ipv4InterfaceAddress>::const_iterator j = |
|
|
| 940 |
m_rreqIdCache.IsDuplicate (iface.GetLocal (), m_requestId); |
976 |
m_rreqIdCache.IsDuplicate (iface.GetLocal (), m_requestId); |
| 941 |
|
977 |
|
| 942 |
Ptr<Packet> packet = Create<Packet> (); |
978 |
Ptr<Packet> packet = Create<Packet> (); |
|
|
979 |
SocketIpTtlTag tag; |
| 980 |
tag.SetTtl (ttl); |
| 981 |
packet->AddPacketTag (tag); |
| 943 |
packet->AddHeader (rreqHeader); |
982 |
packet->AddHeader (rreqHeader); |
| 944 |
TypeHeader tHeader (AODVTYPE_RREQ); |
983 |
TypeHeader tHeader (AODVTYPE_RREQ); |
| 945 |
packet->AddHeader (tHeader); |
984 |
packet->AddHeader (tHeader); |
|
|
| 980 |
m_addressReqTimer[dst].SetArguments (dst); |
1019 |
m_addressReqTimer[dst].SetArguments (dst); |
| 981 |
RoutingTableEntry rt; |
1020 |
RoutingTableEntry rt; |
| 982 |
m_routingTable.LookupRoute (dst, rt); |
1021 |
m_routingTable.LookupRoute (dst, rt); |
| 983 |
rt.IncrementRreqCnt (); |
1022 |
Time retry; |
|
|
1023 |
if (rt.GetHop () < NetDiameter) |
| 1024 |
{ |
| 1025 |
retry = 2 * NodeTraversalTime * (rt.GetHop () + TimeoutBuffer); |
| 1026 |
} |
| 1027 |
else |
| 1028 |
{ |
| 1029 |
// Binary exponential backoff |
| 1030 |
retry = std::pow<uint16_t> (2, rt.GetRreqCnt () - 1) * NetTraversalTime; |
| 1031 |
} |
| 984 |
m_routingTable.Update (rt); |
1032 |
m_routingTable.Update (rt); |
| 985 |
m_addressReqTimer[dst].Schedule (Time (rt.GetRreqCnt () * NetTraversalTime)); |
1033 |
m_addressReqTimer[dst].Schedule (retry); |
| 986 |
NS_LOG_LOGIC ("Scheduled RREQ retry in " << Time (rt.GetRreqCnt () * NetTraversalTime).GetSeconds () << " seconds"); |
1034 |
NS_LOG_LOGIC ("Scheduled RREQ retry in " << retry.GetSeconds () << " seconds"); |
| 987 |
} |
1035 |
} |
| 988 |
|
1036 |
|
| 989 |
void |
1037 |
void |
|
|
| 1241 |
} |
1289 |
} |
| 1242 |
} |
1290 |
} |
| 1243 |
|
1291 |
|
|
|
1292 |
SocketIpTtlTag tag; |
| 1293 |
p->RemovePacketTag (tag); |
| 1294 |
if (tag.GetTtl () < 2) |
| 1295 |
{ |
| 1296 |
NS_LOG_DEBUG ("TTL exceeded. Drop RREQ origin " << src << " destination " << dst ); |
| 1297 |
return; |
| 1298 |
} |
| 1299 |
|
| 1244 |
for (std::map<Ptr<Socket>, Ipv4InterfaceAddress>::const_iterator j = |
1300 |
for (std::map<Ptr<Socket>, Ipv4InterfaceAddress>::const_iterator j = |
| 1245 |
m_socketAddresses.begin (); j != m_socketAddresses.end (); ++j) |
1301 |
m_socketAddresses.begin (); j != m_socketAddresses.end (); ++j) |
| 1246 |
{ |
1302 |
{ |
| 1247 |
Ptr<Socket> socket = j->first; |
1303 |
Ptr<Socket> socket = j->first; |
| 1248 |
Ipv4InterfaceAddress iface = j->second; |
1304 |
Ipv4InterfaceAddress iface = j->second; |
| 1249 |
Ptr<Packet> packet = Create<Packet> (); |
1305 |
Ptr<Packet> packet = Create<Packet> (); |
|
|
1306 |
SocketIpTtlTag ttl; |
| 1307 |
ttl.SetTtl (tag.GetTtl () - 1); |
| 1308 |
packet->AddPacketTag (ttl); |
| 1250 |
packet->AddHeader (rreqHeader); |
1309 |
packet->AddHeader (rreqHeader); |
| 1251 |
TypeHeader tHeader (AODVTYPE_RREQ); |
1310 |
TypeHeader tHeader (AODVTYPE_RREQ); |
| 1252 |
packet->AddHeader (tHeader); |
1311 |
packet->AddHeader (tHeader); |
|
|
| 1279 |
RrepHeader rrepHeader ( /*prefixSize=*/ 0, /*hops=*/ 0, /*dst=*/ rreqHeader.GetDst (), |
1338 |
RrepHeader rrepHeader ( /*prefixSize=*/ 0, /*hops=*/ 0, /*dst=*/ rreqHeader.GetDst (), |
| 1280 |
/*dstSeqNo=*/ m_seqNo, /*origin=*/ toOrigin.GetDestination (), /*lifeTime=*/ MyRouteTimeout); |
1339 |
/*dstSeqNo=*/ m_seqNo, /*origin=*/ toOrigin.GetDestination (), /*lifeTime=*/ MyRouteTimeout); |
| 1281 |
Ptr<Packet> packet = Create<Packet> (); |
1340 |
Ptr<Packet> packet = Create<Packet> (); |
|
|
1341 |
SocketIpTtlTag tag; |
| 1342 |
tag.SetTtl (toOrigin.GetHop ()); |
| 1343 |
packet->AddPacketTag (tag); |
| 1282 |
packet->AddHeader (rrepHeader); |
1344 |
packet->AddHeader (rrepHeader); |
| 1283 |
TypeHeader tHeader (AODVTYPE_RREP); |
1345 |
TypeHeader tHeader (AODVTYPE_RREP); |
| 1284 |
packet->AddHeader (tHeader); |
1346 |
packet->AddHeader (tHeader); |
|
|
| 1311 |
m_routingTable.Update (toOrigin); |
1373 |
m_routingTable.Update (toOrigin); |
| 1312 |
|
1374 |
|
| 1313 |
Ptr<Packet> packet = Create<Packet> (); |
1375 |
Ptr<Packet> packet = Create<Packet> (); |
|
|
1376 |
SocketIpTtlTag tag; |
| 1377 |
tag.SetTtl (toOrigin.GetHop ()); |
| 1378 |
packet->AddPacketTag (tag); |
| 1314 |
packet->AddHeader (rrepHeader); |
1379 |
packet->AddHeader (rrepHeader); |
| 1315 |
TypeHeader tHeader (AODVTYPE_RREP); |
1380 |
TypeHeader tHeader (AODVTYPE_RREP); |
| 1316 |
packet->AddHeader (tHeader); |
1381 |
packet->AddHeader (tHeader); |
|
|
| 1325 |
/*dst seqno=*/ toOrigin.GetSeqNo (), /*origin=*/ toDst.GetDestination (), |
1390 |
/*dst seqno=*/ toOrigin.GetSeqNo (), /*origin=*/ toDst.GetDestination (), |
| 1326 |
/*lifetime=*/ toOrigin.GetLifeTime ()); |
1391 |
/*lifetime=*/ toOrigin.GetLifeTime ()); |
| 1327 |
Ptr<Packet> packetToDst = Create<Packet> (); |
1392 |
Ptr<Packet> packetToDst = Create<Packet> (); |
|
|
1393 |
SocketIpTtlTag gratTag; |
| 1394 |
gratTag.SetTtl (toDst.GetHop ()); |
| 1395 |
packetToDst->AddPacketTag (gratTag); |
| 1328 |
packetToDst->AddHeader (gratRepHeader); |
1396 |
packetToDst->AddHeader (gratRepHeader); |
| 1329 |
TypeHeader type (AODVTYPE_RREP); |
1397 |
TypeHeader type (AODVTYPE_RREP); |
| 1330 |
packetToDst->AddHeader (type); |
1398 |
packetToDst->AddHeader (type); |
|
|
| 1342 |
RrepAckHeader h; |
1410 |
RrepAckHeader h; |
| 1343 |
TypeHeader typeHeader (AODVTYPE_RREP_ACK); |
1411 |
TypeHeader typeHeader (AODVTYPE_RREP_ACK); |
| 1344 |
Ptr<Packet> packet = Create<Packet> (); |
1412 |
Ptr<Packet> packet = Create<Packet> (); |
|
|
1413 |
SocketIpTtlTag tag; |
| 1414 |
tag.SetTtl (1); |
| 1415 |
packet->AddPacketTag (tag); |
| 1345 |
packet->AddHeader (h); |
1416 |
packet->AddHeader (h); |
| 1346 |
packet->AddHeader (typeHeader); |
1417 |
packet->AddHeader (typeHeader); |
| 1347 |
RoutingTableEntry toNeighbor; |
1418 |
RoutingTableEntry toNeighbor; |
|
|
| 1468 |
m_routingTable.Update (toNextHopToOrigin); |
1539 |
m_routingTable.Update (toNextHopToOrigin); |
| 1469 |
} |
1540 |
} |
| 1470 |
|
1541 |
|
|
|
1542 |
SocketIpTtlTag tag; |
| 1543 |
p->RemovePacketTag(tag); |
| 1544 |
if (tag.GetTtl () < 2) |
| 1545 |
{ |
| 1546 |
NS_LOG_DEBUG ("TTL exceeded. Drop RREP destination " << dst << " origin " << rrepHeader.GetOrigin ()); |
| 1547 |
return; |
| 1548 |
} |
| 1549 |
|
| 1471 |
Ptr<Packet> packet = Create<Packet> (); |
1550 |
Ptr<Packet> packet = Create<Packet> (); |
|
|
1551 |
SocketIpTtlTag ttl; |
| 1552 |
ttl.SetTtl(tag.GetTtl() - 1); |
| 1553 |
packet->AddPacketTag(ttl); |
| 1472 |
packet->AddHeader (rrepHeader); |
1554 |
packet->AddHeader (rrepHeader); |
| 1473 |
TypeHeader tHeader (AODVTYPE_RREP); |
1555 |
TypeHeader tHeader (AODVTYPE_RREP); |
| 1474 |
packet->AddHeader (tHeader); |
1556 |
packet->AddHeader (tHeader); |
|
|
| 1556 |
{ |
1638 |
{ |
| 1557 |
TypeHeader typeHeader (AODVTYPE_RERR); |
1639 |
TypeHeader typeHeader (AODVTYPE_RERR); |
| 1558 |
Ptr<Packet> packet = Create<Packet> (); |
1640 |
Ptr<Packet> packet = Create<Packet> (); |
|
|
1641 |
SocketIpTtlTag tag; |
| 1642 |
tag.SetTtl (1); |
| 1643 |
packet->AddPacketTag (tag); |
| 1559 |
packet->AddHeader (rerrHeader); |
1644 |
packet->AddHeader (rerrHeader); |
| 1560 |
packet->AddHeader (typeHeader); |
1645 |
packet->AddHeader (typeHeader); |
| 1561 |
SendRerrMessage (packet, precursors); |
1646 |
SendRerrMessage (packet, precursors); |
|
|
| 1573 |
{ |
1658 |
{ |
| 1574 |
TypeHeader typeHeader (AODVTYPE_RERR); |
1659 |
TypeHeader typeHeader (AODVTYPE_RERR); |
| 1575 |
Ptr<Packet> packet = Create<Packet> (); |
1660 |
Ptr<Packet> packet = Create<Packet> (); |
|
|
1661 |
SocketIpTtlTag tag; |
| 1662 |
tag.SetTtl (1); |
| 1663 |
packet->AddPacketTag (tag); |
| 1576 |
packet->AddHeader (rerrHeader); |
1664 |
packet->AddHeader (rerrHeader); |
| 1577 |
packet->AddHeader (typeHeader); |
1665 |
packet->AddHeader (typeHeader); |
| 1578 |
SendRerrMessage (packet, precursors); |
1666 |
SendRerrMessage (packet, precursors); |
|
|
| 1598 |
*/ |
1686 |
*/ |
| 1599 |
if (toDst.GetRreqCnt () == RreqRetries) |
1687 |
if (toDst.GetRreqCnt () == RreqRetries) |
| 1600 |
{ |
1688 |
{ |
| 1601 |
NS_LOG_LOGIC ("route discovery to " << dst << " has been attempted RreqRetries (" << RreqRetries << ") times"); |
1689 |
NS_LOG_LOGIC ("route discovery to " << dst << " has been attempted RreqRetries (" << RreqRetries << ") times with ttl " << NetDiameter); |
| 1602 |
m_addressReqTimer.erase (dst); |
1690 |
m_addressReqTimer.erase (dst); |
| 1603 |
m_routingTable.DeleteRoute (dst); |
1691 |
m_routingTable.DeleteRoute (dst); |
| 1604 |
NS_LOG_DEBUG ("Route not found. Drop all packets with dst " << dst); |
1692 |
NS_LOG_DEBUG ("Route not found. Drop all packets with dst " << dst); |
|
|
| 1608 |
|
1696 |
|
| 1609 |
if (toDst.GetFlag () == IN_SEARCH) |
1697 |
if (toDst.GetFlag () == IN_SEARCH) |
| 1610 |
{ |
1698 |
{ |
| 1611 |
NS_LOG_LOGIC ("Resend RREQ to " << dst << " ttl " << NetDiameter); |
1699 |
NS_LOG_LOGIC ("Resend RREQ to " << dst << " previous ttl " << toDst.GetHop ()); |
| 1612 |
SendRequest (dst); |
1700 |
SendRequest (dst); |
| 1613 |
} |
1701 |
} |
| 1614 |
else |
1702 |
else |
|
|
| 1680 |
RrepHeader helloHeader (/*prefix size=*/ 0, /*hops=*/ 0, /*dst=*/ iface.GetLocal (), /*dst seqno=*/ m_seqNo, |
1768 |
RrepHeader helloHeader (/*prefix size=*/ 0, /*hops=*/ 0, /*dst=*/ iface.GetLocal (), /*dst seqno=*/ m_seqNo, |
| 1681 |
/*origin=*/ iface.GetLocal (),/*lifetime=*/ Time (AllowedHelloLoss * HelloInterval)); |
1769 |
/*origin=*/ iface.GetLocal (),/*lifetime=*/ Time (AllowedHelloLoss * HelloInterval)); |
| 1682 |
Ptr<Packet> packet = Create<Packet> (); |
1770 |
Ptr<Packet> packet = Create<Packet> (); |
|
|
1771 |
SocketIpTtlTag tag; |
| 1772 |
tag.SetTtl (1); |
| 1773 |
packet->AddPacketTag (tag); |
| 1683 |
packet->AddHeader (helloHeader); |
1774 |
packet->AddHeader (helloHeader); |
| 1684 |
TypeHeader tHeader (AODVTYPE_RREP); |
1775 |
TypeHeader tHeader (AODVTYPE_RREP); |
| 1685 |
packet->AddHeader (tHeader); |
1776 |
packet->AddHeader (tHeader); |
|
|
| 1744 |
NS_LOG_LOGIC ("Send RERR message with maximum size."); |
1835 |
NS_LOG_LOGIC ("Send RERR message with maximum size."); |
| 1745 |
TypeHeader typeHeader (AODVTYPE_RERR); |
1836 |
TypeHeader typeHeader (AODVTYPE_RERR); |
| 1746 |
Ptr<Packet> packet = Create<Packet> (); |
1837 |
Ptr<Packet> packet = Create<Packet> (); |
|
|
1838 |
SocketIpTtlTag tag; |
| 1839 |
tag.SetTtl (1); |
| 1840 |
packet->AddPacketTag (tag); |
| 1747 |
packet->AddHeader (rerrHeader); |
1841 |
packet->AddHeader (rerrHeader); |
| 1748 |
packet->AddHeader (typeHeader); |
1842 |
packet->AddHeader (typeHeader); |
| 1749 |
SendRerrMessage (packet, precursors); |
1843 |
SendRerrMessage (packet, precursors); |
|
|
| 1761 |
{ |
1855 |
{ |
| 1762 |
TypeHeader typeHeader (AODVTYPE_RERR); |
1856 |
TypeHeader typeHeader (AODVTYPE_RERR); |
| 1763 |
Ptr<Packet> packet = Create<Packet> (); |
1857 |
Ptr<Packet> packet = Create<Packet> (); |
|
|
1858 |
SocketIpTtlTag tag; |
| 1859 |
tag.SetTtl (1); |
| 1860 |
packet->AddPacketTag (tag); |
| 1764 |
packet->AddHeader (rerrHeader); |
1861 |
packet->AddHeader (rerrHeader); |
| 1765 |
packet->AddHeader (typeHeader); |
1862 |
packet->AddHeader (typeHeader); |
| 1766 |
SendRerrMessage (packet, precursors); |
1863 |
SendRerrMessage (packet, precursors); |
|
|
| 1789 |
rerrHeader.AddUnDestination (dst, dstSeqNo); |
1886 |
rerrHeader.AddUnDestination (dst, dstSeqNo); |
| 1790 |
RoutingTableEntry toOrigin; |
1887 |
RoutingTableEntry toOrigin; |
| 1791 |
Ptr<Packet> packet = Create<Packet> (); |
1888 |
Ptr<Packet> packet = Create<Packet> (); |
|
|
1889 |
SocketIpTtlTag tag; |
| 1890 |
tag.SetTtl (1); |
| 1891 |
packet->AddPacketTag (tag); |
| 1792 |
packet->AddHeader (rerrHeader); |
1892 |
packet->AddHeader (rerrHeader); |
| 1793 |
packet->AddHeader (TypeHeader (AODVTYPE_RERR)); |
1893 |
packet->AddHeader (TypeHeader (AODVTYPE_RERR)); |
| 1794 |
if (m_routingTable.LookupValidRoute (origin, toOrigin)) |
1894 |
if (m_routingTable.LookupValidRoute (origin, toOrigin)) |