internet: (fixes #2824) ICMP opcode for fragment timeout drop is wrong.
This commit is contained in:
4
src/internet/bindings/modulegen__gcc_ILP32.py
generated
4
src/internet/bindings/modulegen__gcc_ILP32.py
generated
@@ -18821,10 +18821,10 @@ def register_Ns3Icmpv4L4Protocol_methods(root_module, cls):
|
||||
cls.add_method('SendDestUnreachPort',
|
||||
'void',
|
||||
[param('ns3::Ipv4Header', 'header'), param('ns3::Ptr< ns3::Packet const >', 'orgData')])
|
||||
## icmpv4-l4-protocol.h (module 'internet'): void ns3::Icmpv4L4Protocol::SendTimeExceededTtl(ns3::Ipv4Header header, ns3::Ptr<const ns3::Packet> orgData) [member function]
|
||||
## icmpv4-l4-protocol.h (module 'internet'): void ns3::Icmpv4L4Protocol::SendTimeExceededTtl(ns3::Ipv4Header header, ns3::Ptr<const ns3::Packet> orgData, bool isFragment) [member function]
|
||||
cls.add_method('SendTimeExceededTtl',
|
||||
'void',
|
||||
[param('ns3::Ipv4Header', 'header'), param('ns3::Ptr< ns3::Packet const >', 'orgData')])
|
||||
[param('ns3::Ipv4Header', 'header'), param('ns3::Ptr< ns3::Packet const >', 'orgData'), param('bool', 'isFragment')])
|
||||
## icmpv4-l4-protocol.h (module 'internet'): void ns3::Icmpv4L4Protocol::SetDownTarget(ns3::IpL4Protocol::DownTargetCallback cb) [member function]
|
||||
cls.add_method('SetDownTarget',
|
||||
'void',
|
||||
|
||||
4
src/internet/bindings/modulegen__gcc_LP64.py
generated
4
src/internet/bindings/modulegen__gcc_LP64.py
generated
@@ -18821,10 +18821,10 @@ def register_Ns3Icmpv4L4Protocol_methods(root_module, cls):
|
||||
cls.add_method('SendDestUnreachPort',
|
||||
'void',
|
||||
[param('ns3::Ipv4Header', 'header'), param('ns3::Ptr< ns3::Packet const >', 'orgData')])
|
||||
## icmpv4-l4-protocol.h (module 'internet'): void ns3::Icmpv4L4Protocol::SendTimeExceededTtl(ns3::Ipv4Header header, ns3::Ptr<const ns3::Packet> orgData) [member function]
|
||||
## icmpv4-l4-protocol.h (module 'internet'): void ns3::Icmpv4L4Protocol::SendTimeExceededTtl(ns3::Ipv4Header header, ns3::Ptr<const ns3::Packet> orgData, bool isFragment) [member function]
|
||||
cls.add_method('SendTimeExceededTtl',
|
||||
'void',
|
||||
[param('ns3::Ipv4Header', 'header'), param('ns3::Ptr< ns3::Packet const >', 'orgData')])
|
||||
[param('ns3::Ipv4Header', 'header'), param('ns3::Ptr< ns3::Packet const >', 'orgData'), param('bool', 'isFragment')])
|
||||
## icmpv4-l4-protocol.h (module 'internet'): void ns3::Icmpv4L4Protocol::SetDownTarget(ns3::IpL4Protocol::DownTargetCallback cb) [member function]
|
||||
cls.add_method('SetDownTarget',
|
||||
'void',
|
||||
|
||||
@@ -179,7 +179,7 @@ Icmpv4L4Protocol::SendDestUnreach (Ipv4Header header, Ptr<const Packet> orgData,
|
||||
}
|
||||
|
||||
void
|
||||
Icmpv4L4Protocol::SendTimeExceededTtl (Ipv4Header header, Ptr<const Packet> orgData)
|
||||
Icmpv4L4Protocol::SendTimeExceededTtl (Ipv4Header header, Ptr<const Packet> orgData, bool isFragment)
|
||||
{
|
||||
NS_LOG_FUNCTION (this << header << *orgData);
|
||||
Ptr<Packet> p = Create<Packet> ();
|
||||
@@ -187,7 +187,14 @@ Icmpv4L4Protocol::SendTimeExceededTtl (Ipv4Header header, Ptr<const Packet> orgD
|
||||
time.SetHeader (header);
|
||||
time.SetData (orgData);
|
||||
p->AddHeader (time);
|
||||
SendMessage (p, header.GetSource (), Icmpv4Header::TIME_EXCEEDED, Icmpv4TimeExceeded::TIME_TO_LIVE);
|
||||
if (!isFragment)
|
||||
{
|
||||
SendMessage (p, header.GetSource (), Icmpv4Header::TIME_EXCEEDED, Icmpv4TimeExceeded::TIME_TO_LIVE);
|
||||
}
|
||||
else
|
||||
{
|
||||
SendMessage (p, header.GetSource (), Icmpv4Header::TIME_EXCEEDED, Icmpv4TimeExceeded::FRAGMENT_REASSEMBLY);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -107,8 +107,9 @@ public:
|
||||
* \brief Send a Time Exceeded ICMP error
|
||||
* \param header the original IP header
|
||||
* \param orgData the original packet
|
||||
* \param isFragment true if the opcode must be FRAGMENT_REASSEMBLY
|
||||
*/
|
||||
void SendTimeExceededTtl (Ipv4Header header, Ptr<const Packet> orgData);
|
||||
void SendTimeExceededTtl (Ipv4Header header, Ptr<const Packet> orgData, bool isFragment);
|
||||
|
||||
/**
|
||||
* \brief Send a Time Exceeded ICMP error
|
||||
|
||||
@@ -1036,7 +1036,7 @@ Ipv4L3Protocol::IpForward (Ptr<Ipv4Route> rtentry, Ptr<const Packet> p, const Ip
|
||||
ipHeader.GetDestination ().IsMulticast () == false)
|
||||
{
|
||||
Ptr<Icmpv4L4Protocol> icmp = GetIcmp ();
|
||||
icmp->SendTimeExceededTtl (ipHeader, packet);
|
||||
icmp->SendTimeExceededTtl (ipHeader, packet, false);
|
||||
}
|
||||
NS_LOG_WARN ("TTL exceeded. Drop.");
|
||||
m_dropTrace (header, packet, DROP_TTL_EXPIRED, m_node->GetObject<Ipv4> (), interface);
|
||||
@@ -1689,7 +1689,7 @@ Ipv4L3Protocol::HandleFragmentsTimeout (std::pair<uint64_t, uint32_t> key, Ipv4H
|
||||
if ( packet->GetSize () > 8 )
|
||||
{
|
||||
Ptr<Icmpv4L4Protocol> icmp = GetIcmp ();
|
||||
icmp->SendTimeExceededTtl (ipHeader, packet);
|
||||
icmp->SendTimeExceededTtl (ipHeader, packet, true);
|
||||
}
|
||||
m_dropTrace (ipHeader, packet, DROP_FRAGMENT_TIMEOUT, m_node->GetObject<Ipv4> (), iif);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user