[Ns-developers] icmp message error reporting
Mathieu Lacage
mathieu.lacage at sophia.inria.fr
Wed Sep 17 10:16:48 PDT 2008
Hi,
I had to also hack together a working emulation script in ns-3-simu so,
I tested the ns-3 ip+icmp stack in realtime against the linux ip stack.
The good news is that there were very few bugs and that I could ping the
simulation from my host linux box and see the replies. I mainly had to
make sure that the icmp stack would not send icmp messages for packets
whose destination address is a multicast or broadcast address. Hence,
the need for a couple more if statements.
Mathieu
On Sun, 2008-09-14 at 12:43 -0700, Mathieu Lacage wrote:
> hi,
>
> While trying to get tracepath to work on ns-3-simu, it occured to me
> that I can't work around the need to report icmp errors up to udp
> sockets to allow applications which have set the IP_RECVERR socket
> option to receive these errors through ancillary messages in recvmsg.
>
> So, the question here is first whether this should be implemented in our
> default ipv4 stack (it could very well be that this kind of feature is
> outside the scope of our implementation) and, then, how should this be
> implemented. The first question is obviously directed at raj and tom. I
> have tried to provide an answer to the second question. Comments would
> be welcome.
>
> 1) classes added:
> -----------------
>
> a) Icmpv4L4Protocol: subclass of Ipv4L4Protocol, receives all icmpv4
> messages, send messages when needed
> b) Icmpv4Header, Icmpv4Echo, Icmpv4DestinationUnreachable,
> Icmpv4TimeExceeded: subclasses of Header base class. used to generate
> and parse icmp messages.
> c) V4Ping: a ping application
>
> 2) changes to existing code:
> ----------------------------
>
> a) Ipv4L3Protocol
> make Ipv4L3Protocol generate icmp messages when needed:
> - PORT_UNREACH
> - TTL_EXPIRED
> - FRAG_NEEDED
> make Ipv4L3Protocol set the DF bit on outgoing packets when they are
> tagged with SocketMtuDiscoverTag
>
> b) Ipv4L4Protocol:
> add a return value to Receive:
> enum RxStatus {
> RX_OK,
> RX_CSUM_FAILED,
> RX_ENDPOINT_UNREACH
> };
> virtual enum RxStatus Receive(Ptr<Packet> p,
> Ipv4Address const &source,
> Ipv4Address const &destination,
> Ptr<Ipv4Interface> incomingInterface)
> add ReceiveIcmp:
> virtual void ReceiveIcmp (Ipv4Address icmpSource, uint8_t icmpTtl,
> uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo,
> Ipv4Address payloadSource, Ipv4Address payloadDestination,
> const uint8_t payload[8]);
>
> Provide an empty implementation of ReceiveIcmp in Ipv4L4Protocol.
>
> c) Ipv4EndPoint:
> add ForwardIcmp, SetIcmpCallback:
> void SetIcmpCallback
> (Callback<void,Ipv4Address,uint8_t,uint8_t,uint8_t,uint32_t> callback);
> void ForwardIcmp (Ipv4Address icmpSource, uint8_t icmpTtl,
> uint8_t icmpType, uint8_t icmpCode,
> uint32_t icmpInfo);
>
> d) UdpL4Protocol:
> implement ReceiveIcmp. Forwards messages to Ipv4EndPoint::ForwardIcmp
>
> e) UdpSocketImpl:
> register icmp callback with associated Ipv4EndPoint
> forward icmp calls to private callback:
> Callback<void, Ipv4Address,uint8_t,uint8_t,uint8_t,uint32_t>
> m_icmpCallback;
> add attribute: "IcmpCallback" which can be used to set the
> m_icmpCallback.
>
> The code above has been pretty extensively tested in the ns-3-simu
> branch so, I think that it is more or less ready to be merged if tom and
> raj are ok with it.
>
> regards,
> Mathieu
>
>
More information about the Ns-developers
mailing list