src/internet/model/ipv6-extension.cc
changeset 10669 46c9391bc38b
parent 10652 dc18deba4502
child 10968 2d29fee2b7b8
equal deleted inserted replaced
10668:50137e334cf2 10669:46c9391bc38b
    52     .SetParent<Object> ()
    52     .SetParent<Object> ()
    53     .AddAttribute ("ExtensionNumber", "The IPv6 extension number.",
    53     .AddAttribute ("ExtensionNumber", "The IPv6 extension number.",
    54                    UintegerValue (0),
    54                    UintegerValue (0),
    55                    MakeUintegerAccessor (&Ipv6Extension::GetExtensionNumber),
    55                    MakeUintegerAccessor (&Ipv6Extension::GetExtensionNumber),
    56                    MakeUintegerChecker<uint8_t> ())
    56                    MakeUintegerChecker<uint8_t> ())
    57     .AddTraceSource ("Drop", "Drop IPv6 packet",
       
    58                      MakeTraceSourceAccessor (&Ipv6Extension::m_dropTrace))
       
    59   ;
    57   ;
    60   return tid;
    58   return tid;
    61 }
    59 }
    62 
    60 
    63 Ipv6Extension::Ipv6Extension ()
    61 Ipv6Extension::Ipv6Extension ()
    84   NS_LOG_FUNCTION_NOARGS ();
    82   NS_LOG_FUNCTION_NOARGS ();
    85 
    83 
    86   return m_node;
    84   return m_node;
    87 }
    85 }
    88 
    86 
    89 uint8_t Ipv6Extension::ProcessOptions (Ptr<Packet>& packet, uint8_t offset, uint8_t length, Ipv6Header const& ipv6Header, Ipv6Address dst, uint8_t *nextHeader, bool& isDropped)
    87 uint8_t Ipv6Extension::ProcessOptions (Ptr<Packet>& packet,
       
    88                                        uint8_t offset,
       
    89                                        uint8_t length,
       
    90                                        Ipv6Header const& ipv6Header,
       
    91                                        Ipv6Address dst,
       
    92                                        uint8_t *nextHeader,
       
    93                                        bool& stopProcessing,
       
    94                                        bool& isDropped,
       
    95                                        Ipv6L3Protocol::DropReason& dropReason)
    90 {
    96 {
    91   NS_LOG_FUNCTION (this << packet << offset << length << ipv6Header << dst << nextHeader << isDropped);
    97   NS_LOG_FUNCTION (this << packet << offset << length << ipv6Header << dst << nextHeader << isDropped);
    92 
    98 
    93   // For ICMPv6 Error packets
    99   // For ICMPv6 Error packets
    94   Ptr<Packet> malformedPacket = packet->Copy ();
   100   Ptr<Packet> malformedPacket = packet->Copy ();
   123               optionLength = *(data + processedSize + 1) + 2;
   129               optionLength = *(data + processedSize + 1) + 2;
   124               break;
   130               break;
   125 
   131 
   126             case 1:
   132             case 1:
   127               NS_LOG_LOGIC ("Unknown Option. Drop!");
   133               NS_LOG_LOGIC ("Unknown Option. Drop!");
   128               m_dropTrace (packet);
       
   129               optionLength = 0;
   134               optionLength = 0;
   130               isDropped = true;
   135               isDropped = true;
       
   136               stopProcessing = true;
       
   137               dropReason = Ipv6L3Protocol::DROP_UNKNOWN_OPTION;
   131               break;
   138               break;
   132 
   139 
   133             case 2:
   140             case 2:
   134               NS_LOG_LOGIC ("Unknown Option. Drop!");
   141               NS_LOG_LOGIC ("Unknown Option. Drop!");
   135               icmpv6->SendErrorParameterError (malformedPacket, ipv6Header.GetSourceAddress (), Icmpv6Header::ICMPV6_UNKNOWN_OPTION, offset + processedSize);
   142               icmpv6->SendErrorParameterError (malformedPacket, ipv6Header.GetSourceAddress (), Icmpv6Header::ICMPV6_UNKNOWN_OPTION, offset + processedSize);
   136               m_dropTrace (packet);
       
   137               optionLength = 0;
   143               optionLength = 0;
   138               isDropped = true;
   144               isDropped = true;
       
   145               stopProcessing = true;
       
   146               dropReason = Ipv6L3Protocol::DROP_UNKNOWN_OPTION;
   139               break;
   147               break;
   140 
   148 
   141             case 3:
   149             case 3:
   142               NS_LOG_LOGIC ("Unknown Option. Drop!");
   150               NS_LOG_LOGIC ("Unknown Option. Drop!");
   143 
   151 
   144               if (!ipv6Header.GetDestinationAddress ().IsMulticast ())
   152               if (!ipv6Header.GetDestinationAddress ().IsMulticast ())
   145                 {
   153                 {
   146                   icmpv6->SendErrorParameterError (malformedPacket, ipv6Header.GetSourceAddress (), Icmpv6Header::ICMPV6_UNKNOWN_OPTION, offset + processedSize);
   154                   icmpv6->SendErrorParameterError (malformedPacket, ipv6Header.GetSourceAddress (), Icmpv6Header::ICMPV6_UNKNOWN_OPTION, offset + processedSize);
   147                   m_dropTrace (packet);
       
   148                   optionLength = 0;
       
   149                   isDropped = true;
       
   150                   break;
       
   151                 }
   155                 }
   152 
       
   153               m_dropTrace (packet);
       
   154               optionLength = 0;
   156               optionLength = 0;
   155               isDropped = true;
   157               isDropped = true;
       
   158               stopProcessing = true;
       
   159               dropReason = Ipv6L3Protocol::DROP_UNKNOWN_OPTION;
   156               break;
   160               break;
   157 
   161 
   158             default:
   162             default:
   159               break;
   163               break;
   160             }
   164             }
   208   NS_LOG_FUNCTION_NOARGS ();
   212   NS_LOG_FUNCTION_NOARGS ();
   209 
   213 
   210   return EXT_NUMBER;
   214   return EXT_NUMBER;
   211 }
   215 }
   212 
   216 
   213 uint8_t Ipv6ExtensionHopByHop::Process (Ptr<Packet>& packet, uint8_t offset, Ipv6Header const& ipv6Header, Ipv6Address dst, uint8_t *nextHeader, bool& isDropped)
   217 uint8_t Ipv6ExtensionHopByHop::Process (Ptr<Packet>& packet,
       
   218                                         uint8_t offset,
       
   219                                         Ipv6Header const& ipv6Header,
       
   220                                         Ipv6Address dst,
       
   221                                         uint8_t *nextHeader,
       
   222                                         bool& stopProcessing,
       
   223                                         bool& isDropped,
       
   224                                         Ipv6L3Protocol::DropReason& dropReason)
   214 {
   225 {
   215   NS_LOG_FUNCTION (this << packet << offset << ipv6Header << dst << nextHeader << isDropped);
   226   NS_LOG_FUNCTION (this << packet << offset << ipv6Header << dst << nextHeader << isDropped);
   216 
   227 
   217   Ptr<Packet> p = packet->Copy ();
   228   Ptr<Packet> p = packet->Copy ();
   218   p->RemoveAtStart (offset);
   229   p->RemoveAtStart (offset);
   226 
   237 
   227   uint8_t processedSize = hopbyhopHeader.GetOptionsOffset ();
   238   uint8_t processedSize = hopbyhopHeader.GetOptionsOffset ();
   228   offset += processedSize;
   239   offset += processedSize;
   229   uint8_t length = hopbyhopHeader.GetLength () - hopbyhopHeader.GetOptionsOffset ();
   240   uint8_t length = hopbyhopHeader.GetLength () - hopbyhopHeader.GetOptionsOffset ();
   230 
   241 
   231   processedSize += ProcessOptions (packet, offset, length, ipv6Header, dst, nextHeader, isDropped);
   242   processedSize += ProcessOptions (packet, offset, length, ipv6Header, dst, nextHeader, stopProcessing, isDropped, dropReason);
   232 
   243 
   233   return processedSize;
   244   return processedSize;
   234 }
   245 }
   235 
   246 
   236 
   247 
   260   NS_LOG_FUNCTION_NOARGS ();
   271   NS_LOG_FUNCTION_NOARGS ();
   261 
   272 
   262   return EXT_NUMBER;
   273   return EXT_NUMBER;
   263 }
   274 }
   264 
   275 
   265 uint8_t Ipv6ExtensionDestination::Process (Ptr<Packet>& packet, uint8_t offset, Ipv6Header const& ipv6Header, Ipv6Address dst, uint8_t *nextHeader, bool& isDropped)
   276 uint8_t Ipv6ExtensionDestination::Process (Ptr<Packet>& packet,
       
   277                                            uint8_t offset,
       
   278                                            Ipv6Header const& ipv6Header,
       
   279                                            Ipv6Address dst,
       
   280                                            uint8_t *nextHeader,
       
   281                                            bool& stopProcessing,
       
   282                                            bool& isDropped,
       
   283                                            Ipv6L3Protocol::DropReason& dropReason)
   266 {
   284 {
   267   NS_LOG_FUNCTION (this << packet << offset << ipv6Header << dst << nextHeader << isDropped);
   285   NS_LOG_FUNCTION (this << packet << offset << ipv6Header << dst << nextHeader << isDropped);
   268 
   286 
   269   Ptr<Packet> p = packet->Copy ();
   287   Ptr<Packet> p = packet->Copy ();
   270   p->RemoveAtStart (offset);
   288   p->RemoveAtStart (offset);
   278 
   296 
   279   uint8_t processedSize = destinationHeader.GetOptionsOffset ();
   297   uint8_t processedSize = destinationHeader.GetOptionsOffset ();
   280   offset += processedSize;
   298   offset += processedSize;
   281   uint8_t length = destinationHeader.GetLength () - destinationHeader.GetOptionsOffset ();
   299   uint8_t length = destinationHeader.GetLength () - destinationHeader.GetOptionsOffset ();
   282 
   300 
   283   processedSize += ProcessOptions (packet, offset, length, ipv6Header, dst, nextHeader, isDropped);
   301   processedSize += ProcessOptions (packet, offset, length, ipv6Header, dst, nextHeader, stopProcessing, isDropped, dropReason);
   284 
   302 
   285   return processedSize;
   303   return processedSize;
   286 }
   304 }
   287 
   305 
   288 
   306 
   325   NS_LOG_FUNCTION_NOARGS ();
   343   NS_LOG_FUNCTION_NOARGS ();
   326 
   344 
   327   return EXT_NUMBER;
   345   return EXT_NUMBER;
   328 }
   346 }
   329 
   347 
   330 uint8_t Ipv6ExtensionFragment::Process (Ptr<Packet>& packet, uint8_t offset, Ipv6Header const& ipv6Header, Ipv6Address dst, uint8_t *nextHeader, bool& isDropped)
   348 uint8_t Ipv6ExtensionFragment::Process (Ptr<Packet>& packet,
       
   349                                         uint8_t offset,
       
   350                                         Ipv6Header const& ipv6Header,
       
   351                                         Ipv6Address dst,
       
   352                                         uint8_t *nextHeader,
       
   353                                         bool& stopProcessing,
       
   354                                         bool& isDropped,
       
   355                                         Ipv6L3Protocol::DropReason& dropReason)
   331 {
   356 {
   332   NS_LOG_FUNCTION (this << packet << offset << ipv6Header << dst << nextHeader << isDropped);
   357   NS_LOG_FUNCTION (this << packet << offset << ipv6Header << dst << nextHeader << isDropped);
   333 
   358 
   334   Ptr<Packet> p = packet->Copy ();
   359   Ptr<Packet> p = packet->Copy ();
   335   p->RemoveAtStart (offset);
   360   p->RemoveAtStart (offset);
   380   if (fragments->IsEntire ())
   405   if (fragments->IsEntire ())
   381     {
   406     {
   382       packet = fragments->GetPacket ();
   407       packet = fragments->GetPacket ();
   383       fragments->CancelTimeout ();
   408       fragments->CancelTimeout ();
   384       m_fragments.erase (fragmentsId);
   409       m_fragments.erase (fragmentsId);
   385       isDropped = false;
   410       stopProcessing = false;
   386     }
   411     }
   387   else
   412   else
   388     {
   413     {
   389       // the fragment is not "dropped", but Ipv6L3Protocol::LocalDeliver must stop processing it.
   414       stopProcessing = true;
   390       isDropped = true;
       
   391     }
   415     }
   392 
   416 
   393   return 0;
   417   return 0;
   394 }
   418 }
   395 
   419 
   567   unfragmentablePart.clear ();
   591   unfragmentablePart.clear ();
   568 }
   592 }
   569 
   593 
   570 
   594 
   571 void Ipv6ExtensionFragment::HandleFragmentsTimeout (std::pair<Ipv6Address, uint32_t> fragmentsId,
   595 void Ipv6ExtensionFragment::HandleFragmentsTimeout (std::pair<Ipv6Address, uint32_t> fragmentsId,
   572                                                     Ipv6Header & ipHeader)
   596                                                     Ipv6Header ipHeader)
   573 {
   597 {
   574   Ptr<Fragments> fragments;
   598   Ptr<Fragments> fragments;
   575 
   599 
   576   MapFragments_t::iterator it = m_fragments.find (fragmentsId);
   600   MapFragments_t::iterator it = m_fragments.find (fragmentsId);
   577   NS_ASSERT_MSG(it != m_fragments.end (), "IPv6 Fragment timeout reached for non-existent fragment");
   601   NS_ASSERT_MSG(it != m_fragments.end (), "IPv6 Fragment timeout reached for non-existent fragment");
   578   fragments = it->second;
   602   fragments = it->second;
   579 
   603 
   580   Ptr<Packet> packet = fragments->GetPartialPacket ();
   604   Ptr<Packet> packet = fragments->GetPartialPacket ();
   581 
   605 
   582   packet->AddHeader (ipHeader);
       
   583 
       
   584   // if we have at least 8 bytes, we can send an ICMP.
   606   // if we have at least 8 bytes, we can send an ICMP.
   585   if ( packet->GetSize () > 8 )
   607   if ( packet->GetSize () > 8 )
   586     {
   608     {
       
   609       Ptr<Packet> p = packet->Copy ();
       
   610       p->AddHeader (ipHeader);
   587       Ptr<Icmpv6L4Protocol> icmp = GetNode ()->GetObject<Icmpv6L4Protocol> ();
   611       Ptr<Icmpv6L4Protocol> icmp = GetNode ()->GetObject<Icmpv6L4Protocol> ();
   588       icmp->SendErrorTimeExceeded (packet, ipHeader.GetSourceAddress (), Icmpv6Header::ICMPV6_FRAGTIME);
   612       icmp->SendErrorTimeExceeded (p, ipHeader.GetSourceAddress (), Icmpv6Header::ICMPV6_FRAGTIME);
   589     }
   613     }
   590   m_dropTrace (packet);
   614 
       
   615   Ptr<Ipv6L3Protocol> ipL3 = GetNode ()->GetObject<Ipv6L3Protocol> ();
       
   616   ipL3->ReportDrop (ipHeader, packet, Ipv6L3Protocol::DROP_FRAGMENT_TIMEOUT);
   591 
   617 
   592   // clear the buffers
   618   // clear the buffers
   593   m_fragments.erase (fragmentsId);
   619   m_fragments.erase (fragmentsId);
   594 }
   620 }
   595 
   621 
   735 {
   761 {
   736   NS_LOG_FUNCTION_NOARGS ();
   762   NS_LOG_FUNCTION_NOARGS ();
   737   return 0;
   763   return 0;
   738 }
   764 }
   739 
   765 
   740 uint8_t Ipv6ExtensionRouting::Process (Ptr<Packet>& packet, uint8_t offset, Ipv6Header const& ipv6Header, Ipv6Address dst, uint8_t *nextHeader, bool& isDropped)
   766 uint8_t Ipv6ExtensionRouting::Process (Ptr<Packet>& packet,
       
   767                                        uint8_t offset,
       
   768                                        Ipv6Header const& ipv6Header,
       
   769                                        Ipv6Address dst,
       
   770                                        uint8_t *nextHeader,
       
   771                                        bool& stopProcessing,
       
   772                                        bool& isDropped,
       
   773                                        Ipv6L3Protocol::DropReason& dropReason)
   741 {
   774 {
   742   NS_LOG_FUNCTION (this << packet << offset << ipv6Header << dst << nextHeader << isDropped);
   775   NS_LOG_FUNCTION (this << packet << offset << ipv6Header << dst << nextHeader << isDropped);
   743 
   776 
   744   // For ICMPv6 Error Packets
   777   // For ICMPv6 Error Packets
   745   Ptr<Packet> malformedPacket = packet->Copy ();
   778   Ptr<Packet> malformedPacket = packet->Copy ();
   775       else
   808       else
   776         {
   809         {
   777           NS_LOG_LOGIC ("Malformed header. Drop!");
   810           NS_LOG_LOGIC ("Malformed header. Drop!");
   778 
   811 
   779           icmpv6->SendErrorParameterError (malformedPacket, ipv6Header.GetSourceAddress (), Icmpv6Header::ICMPV6_MALFORMED_HEADER, offset + 1);
   812           icmpv6->SendErrorParameterError (malformedPacket, ipv6Header.GetSourceAddress (), Icmpv6Header::ICMPV6_MALFORMED_HEADER, offset + 1);
   780           m_dropTrace (packet);
   813           dropReason = Ipv6L3Protocol::DROP_MALFORMED_HEADER;
   781           isDropped = true;
   814           isDropped = true;
       
   815           stopProcessing = true;
   782         }
   816         }
   783 
   817 
   784       return routingLength;
   818       return routingLength;
   785     }
   819     }
   786 
   820 
   787   return ipv6ExtensionRouting->Process (packet, offset, ipv6Header, dst, (uint8_t *)0, isDropped);
   821   return ipv6ExtensionRouting->Process (packet, offset, ipv6Header, dst, (uint8_t *)0, stopProcessing, isDropped, dropReason);
   788 }
   822 }
   789 
   823 
   790 
   824 
   791 NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionRoutingDemux);
   825 NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionRoutingDemux);
   792 
   826 
   876   NS_LOG_FUNCTION_NOARGS ();
   910   NS_LOG_FUNCTION_NOARGS ();
   877 
   911 
   878   return TYPE_ROUTING;
   912   return TYPE_ROUTING;
   879 }
   913 }
   880 
   914 
   881 uint8_t Ipv6ExtensionLooseRouting::Process (Ptr<Packet>& packet, uint8_t offset, Ipv6Header const& ipv6Header, Ipv6Address dst, uint8_t *nextHeader, bool& isDropped)
   915 uint8_t Ipv6ExtensionLooseRouting::Process (Ptr<Packet>& packet,
       
   916                                             uint8_t offset,
       
   917                                             Ipv6Header const& ipv6Header,
       
   918                                             Ipv6Address dst,
       
   919                                             uint8_t *nextHeader,
       
   920                                             bool& stopProcessing,
       
   921                                             bool& isDropped,
       
   922                                             Ipv6L3Protocol::DropReason& dropReason)
   882 {
   923 {
   883   NS_LOG_FUNCTION (this << packet << offset << ipv6Header << dst << nextHeader << isDropped);
   924   NS_LOG_FUNCTION (this << packet << offset << ipv6Header << dst << nextHeader << isDropped);
   884 
   925 
   885   // For ICMPv6 Error packets
   926   // For ICMPv6 Error packets
   886   Ptr<Packet> malformedPacket = packet->Copy ();
   927   Ptr<Packet> malformedPacket = packet->Copy ();
   929 
   970 
   930   if (length % 2 != 0)
   971   if (length % 2 != 0)
   931     {
   972     {
   932       NS_LOG_LOGIC ("Malformed header. Drop!");
   973       NS_LOG_LOGIC ("Malformed header. Drop!");
   933       icmpv6->SendErrorParameterError (malformedPacket, srcAddress, Icmpv6Header::ICMPV6_MALFORMED_HEADER, offset + 1);
   974       icmpv6->SendErrorParameterError (malformedPacket, srcAddress, Icmpv6Header::ICMPV6_MALFORMED_HEADER, offset + 1);
   934       m_dropTrace (packet);
   975       dropReason = Ipv6L3Protocol::DROP_MALFORMED_HEADER;
   935       isDropped = true;
   976       isDropped = true;
       
   977       stopProcessing = true;
   936       return routingHeader.GetSerializedSize ();
   978       return routingHeader.GetSerializedSize ();
   937     }
   979     }
   938 
   980 
   939   if (segmentsLeft > nbAddress)
   981   if (segmentsLeft > nbAddress)
   940     {
   982     {
   941       NS_LOG_LOGIC ("Malformed header. Drop!");
   983       NS_LOG_LOGIC ("Malformed header. Drop!");
   942       icmpv6->SendErrorParameterError (malformedPacket, srcAddress, Icmpv6Header::ICMPV6_MALFORMED_HEADER, offset + 3);
   984       icmpv6->SendErrorParameterError (malformedPacket, srcAddress, Icmpv6Header::ICMPV6_MALFORMED_HEADER, offset + 3);
   943       m_dropTrace (packet);
   985       dropReason = Ipv6L3Protocol::DROP_MALFORMED_HEADER;
   944       isDropped = true;
   986       isDropped = true;
       
   987       stopProcessing = true;
   945       return routingHeader.GetSerializedSize ();
   988       return routingHeader.GetSerializedSize ();
   946     }
   989     }
   947 
   990 
   948   routingHeader.SetSegmentsLeft (segmentsLeft - 1);
   991   routingHeader.SetSegmentsLeft (segmentsLeft - 1);
   949   nextAddressIndex = nbAddress - segmentsLeft;
   992   nextAddressIndex = nbAddress - segmentsLeft;
   950   nextAddress = routingHeader.GetRouterAddress (nextAddressIndex);
   993   nextAddress = routingHeader.GetRouterAddress (nextAddressIndex);
   951 
   994 
   952   if (nextAddress.IsMulticast () || destAddress.IsMulticast ())
   995   if (nextAddress.IsMulticast () || destAddress.IsMulticast ())
   953     {
   996     {
   954       m_dropTrace (packet);
   997       dropReason = Ipv6L3Protocol::DROP_MALFORMED_HEADER;
   955       isDropped = true;
   998       isDropped = true;
       
   999       stopProcessing = true;
   956       return routingHeader.GetSerializedSize ();
  1000       return routingHeader.GetSerializedSize ();
   957     }
  1001     }
   958 
  1002 
   959   routingHeader.SetRouterAddress (nextAddressIndex, destAddress);
  1003   routingHeader.SetRouterAddress (nextAddressIndex, destAddress);
   960   ipv6header.SetDestinationAddress (nextAddress);
  1004   ipv6header.SetDestinationAddress (nextAddress);
   961 
  1005 
   962   if (hopLimit <= 1)
  1006   if (hopLimit <= 1)
   963     {
  1007     {
   964       NS_LOG_LOGIC ("Time Exceeded : Hop Limit <= 1. Drop!");
  1008       NS_LOG_LOGIC ("Time Exceeded : Hop Limit <= 1. Drop!");
   965       icmpv6->SendErrorTimeExceeded (malformedPacket, srcAddress, Icmpv6Header::ICMPV6_HOPLIMIT);
  1009       icmpv6->SendErrorTimeExceeded (malformedPacket, srcAddress, Icmpv6Header::ICMPV6_HOPLIMIT);
   966       m_dropTrace (packet);
  1010       dropReason = Ipv6L3Protocol::DROP_MALFORMED_HEADER;
   967       isDropped = true;
  1011       isDropped = true;
       
  1012       stopProcessing = true;
   968       return routingHeader.GetSerializedSize ();
  1013       return routingHeader.GetSerializedSize ();
   969     }
  1014     }
   970 
  1015 
   971   routingHeader.SetLength (88);
  1016   routingHeader.SetLength (88);
   972   ipv6header.SetHopLimit (hopLimit - 1);
  1017   ipv6header.SetHopLimit (hopLimit - 1);
  1029   NS_LOG_FUNCTION_NOARGS ();
  1074   NS_LOG_FUNCTION_NOARGS ();
  1030 
  1075 
  1031   return EXT_NUMBER;
  1076   return EXT_NUMBER;
  1032 }
  1077 }
  1033 
  1078 
  1034 uint8_t Ipv6ExtensionESP::Process (Ptr<Packet>& packet, uint8_t offset, Ipv6Header const& ipv6Header, Ipv6Address dst, uint8_t *nextHeader, bool& isDropped)
  1079 uint8_t Ipv6ExtensionESP::Process (Ptr<Packet>& packet,
       
  1080                                    uint8_t offset,
       
  1081                                    Ipv6Header const& ipv6Header,
       
  1082                                    Ipv6Address dst,
       
  1083                                    uint8_t *nextHeader,
       
  1084                                    bool& stopProcessing,
       
  1085                                    bool& isDropped,
       
  1086                                    Ipv6L3Protocol::DropReason& dropReason)
  1035 {
  1087 {
  1036   NS_LOG_FUNCTION (this << packet << offset << ipv6Header << dst << nextHeader << isDropped);
  1088   NS_LOG_FUNCTION (this << packet << offset << ipv6Header << dst << nextHeader << isDropped);
  1037 
  1089 
  1038   /** \todo */
  1090   /** \todo */
  1039 
  1091 
  1067   NS_LOG_FUNCTION_NOARGS ();
  1119   NS_LOG_FUNCTION_NOARGS ();
  1068 
  1120 
  1069   return EXT_NUMBER;
  1121   return EXT_NUMBER;
  1070 }
  1122 }
  1071 
  1123 
  1072 uint8_t Ipv6ExtensionAH::Process (Ptr<Packet>& packet, uint8_t offset, Ipv6Header const& ipv6Header, Ipv6Address dst, uint8_t *nextHeader, bool& isDropped)
  1124 uint8_t Ipv6ExtensionAH::Process (Ptr<Packet>& packet,
       
  1125                                   uint8_t offset,
       
  1126                                   Ipv6Header const& ipv6Header,
       
  1127                                   Ipv6Address dst,
       
  1128                                   uint8_t *nextHeader,
       
  1129                                   bool& stopProcessing,
       
  1130                                   bool& isDropped,
       
  1131                                   Ipv6L3Protocol::DropReason& dropReason)
  1073 {
  1132 {
  1074   NS_LOG_FUNCTION (this << packet << offset << ipv6Header << dst << nextHeader << isDropped);
  1133   NS_LOG_FUNCTION (this << packet << offset << ipv6Header << dst << nextHeader << isDropped);
  1075 
  1134 
  1076   /** \todo */
  1135   /** \todo */
  1077 
  1136