author | Tommaso Pecorella <tommaso.pecorella@unifi.it> |
Thu, 14 Nov 2013 22:43:53 +0100 | |
changeset 10405 | 45c8fceae24e |
parent 9145 | 5752b425cdf5 |
child 10440 | 1e48ff9185f1 |
permissions | -rw-r--r-- |
3820 | 1 |
#ifndef ICMPV4_L4_PROTOCOL_H |
2 |
#define ICMPV4_L4_PROTOCOL_H |
|
3 |
||
7717
cfa1741013dd
Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents:
7256
diff
changeset
|
4 |
#include "ip-l4-protocol.h" |
3820 | 5 |
#include "icmpv4.h" |
6 |
#include "ns3/ipv4-address.h" |
|
7 |
||
8 |
namespace ns3 { |
|
9 |
||
10 |
class Node; |
|
11 |
class Ipv4Interface; |
|
4472
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
3820
diff
changeset
|
12 |
class Ipv4Route; |
3820 | 13 |
|
7717
cfa1741013dd
Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents:
7256
diff
changeset
|
14 |
class Icmpv4L4Protocol : public IpL4Protocol |
3820 | 15 |
{ |
16 |
public: |
|
17 |
static TypeId GetTypeId (void); |
|
4571
2c9c600270e0
cleanup ip alias unfinished cases (bug 591)
Tom Henderson <tomh@tomh.org>
parents:
4558
diff
changeset
|
18 |
static const uint8_t PROT_NUMBER; |
2c9c600270e0
cleanup ip alias unfinished cases (bug 591)
Tom Henderson <tomh@tomh.org>
parents:
4558
diff
changeset
|
19 |
|
3820 | 20 |
Icmpv4L4Protocol (); |
21 |
virtual ~Icmpv4L4Protocol (); |
|
22 |
||
23 |
void SetNode (Ptr<Node> node); |
|
24 |
||
25 |
static uint16_t GetStaticProtocolNumber (void); |
|
26 |
virtual int GetProtocolNumber (void) const; |
|
10405
45c8fceae24e
Doxygen fixes to Topology-read, Ipv6, and tcp-socket
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
9145
diff
changeset
|
27 |
|
45c8fceae24e
Doxygen fixes to Topology-read, Ipv6, and tcp-socket
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
9145
diff
changeset
|
28 |
/** |
45c8fceae24e
Doxygen fixes to Topology-read, Ipv6, and tcp-socket
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
9145
diff
changeset
|
29 |
* \brief Receive method. |
45c8fceae24e
Doxygen fixes to Topology-read, Ipv6, and tcp-socket
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
9145
diff
changeset
|
30 |
* \param p the packet |
45c8fceae24e
Doxygen fixes to Topology-read, Ipv6, and tcp-socket
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
9145
diff
changeset
|
31 |
* \param header the IPv4 header |
45c8fceae24e
Doxygen fixes to Topology-read, Ipv6, and tcp-socket
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
9145
diff
changeset
|
32 |
* \param interface the interface from which the packet is coming |
45c8fceae24e
Doxygen fixes to Topology-read, Ipv6, and tcp-socket
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
9145
diff
changeset
|
33 |
*/ |
7717
cfa1741013dd
Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents:
7256
diff
changeset
|
34 |
virtual enum IpL4Protocol::RxStatus Receive (Ptr<Packet> p, |
10405
45c8fceae24e
Doxygen fixes to Topology-read, Ipv6, and tcp-socket
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
9145
diff
changeset
|
35 |
Ipv4Header const &header, |
45c8fceae24e
Doxygen fixes to Topology-read, Ipv6, and tcp-socket
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
9145
diff
changeset
|
36 |
Ptr<Ipv4Interface> incomingInterface); |
45c8fceae24e
Doxygen fixes to Topology-read, Ipv6, and tcp-socket
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
9145
diff
changeset
|
37 |
|
45c8fceae24e
Doxygen fixes to Topology-read, Ipv6, and tcp-socket
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
9145
diff
changeset
|
38 |
/** |
45c8fceae24e
Doxygen fixes to Topology-read, Ipv6, and tcp-socket
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
9145
diff
changeset
|
39 |
* \brief Receive method. |
45c8fceae24e
Doxygen fixes to Topology-read, Ipv6, and tcp-socket
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
9145
diff
changeset
|
40 |
* \param p the packet |
45c8fceae24e
Doxygen fixes to Topology-read, Ipv6, and tcp-socket
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
9145
diff
changeset
|
41 |
* \param header the IPv6 header |
45c8fceae24e
Doxygen fixes to Topology-read, Ipv6, and tcp-socket
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
9145
diff
changeset
|
42 |
* \param interface the interface from which the packet is coming |
45c8fceae24e
Doxygen fixes to Topology-read, Ipv6, and tcp-socket
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
9145
diff
changeset
|
43 |
*/ |
7717
cfa1741013dd
Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents:
7256
diff
changeset
|
44 |
virtual enum IpL4Protocol::RxStatus Receive (Ptr<Packet> p, |
10405
45c8fceae24e
Doxygen fixes to Topology-read, Ipv6, and tcp-socket
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
9145
diff
changeset
|
45 |
Ipv6Header const &header, |
45c8fceae24e
Doxygen fixes to Topology-read, Ipv6, and tcp-socket
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
9145
diff
changeset
|
46 |
Ptr<Ipv6Interface> incomingInterface); |
3820 | 47 |
|
48 |
void SendDestUnreachFragNeeded (Ipv4Header header, Ptr<const Packet> orgData, uint16_t nextHopMtu); |
|
49 |
void SendTimeExceededTtl (Ipv4Header header, Ptr<const Packet> orgData); |
|
50 |
void SendDestUnreachPort (Ipv4Header header, Ptr<const Packet> orgData); |
|
6723
fff5c512f345
bug 967: decouple Ipv4L4Protocols from Ipv4L3Protocol::Send() via a new callback
Tom Henderson <tomh@tomh.org>
parents:
6442
diff
changeset
|
51 |
|
7717
cfa1741013dd
Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents:
7256
diff
changeset
|
52 |
// From IpL4Protocol |
cfa1741013dd
Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents:
7256
diff
changeset
|
53 |
virtual void SetDownTarget (IpL4Protocol::DownTargetCallback cb); |
cfa1741013dd
Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents:
7256
diff
changeset
|
54 |
virtual void SetDownTarget6 (IpL4Protocol::DownTargetCallback6 cb); |
cfa1741013dd
Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents:
7256
diff
changeset
|
55 |
// From IpL4Protocol |
cfa1741013dd
Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents:
7256
diff
changeset
|
56 |
virtual IpL4Protocol::DownTargetCallback GetDownTarget (void) const; |
cfa1741013dd
Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents:
7256
diff
changeset
|
57 |
virtual IpL4Protocol::DownTargetCallback6 GetDownTarget6 (void) const; |
4472
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
3820
diff
changeset
|
58 |
protected: |
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
3820
diff
changeset
|
59 |
/* |
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
3820
diff
changeset
|
60 |
* This function will notify other components connected to the node that a new stack member is now connected |
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
3820
diff
changeset
|
61 |
* This will be used to notify Layer 3 protocol of layer 4 protocol stack to connect them together. |
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
3820
diff
changeset
|
62 |
*/ |
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
3820
diff
changeset
|
63 |
virtual void NotifyNewAggregate (); |
3820 | 64 |
private: |
65 |
void HandleEcho (Ptr<Packet> p, |
|
7176
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
6834
diff
changeset
|
66 |
Icmpv4Header header, |
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
6834
diff
changeset
|
67 |
Ipv4Address source, |
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
6834
diff
changeset
|
68 |
Ipv4Address destination); |
3820 | 69 |
void HandleDestUnreach (Ptr<Packet> p, |
7176
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
6834
diff
changeset
|
70 |
Icmpv4Header header, |
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
6834
diff
changeset
|
71 |
Ipv4Address source, |
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
6834
diff
changeset
|
72 |
Ipv4Address destination); |
3820 | 73 |
void HandleTimeExceeded (Ptr<Packet> p, |
7176
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
6834
diff
changeset
|
74 |
Icmpv4Header icmp, |
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
6834
diff
changeset
|
75 |
Ipv4Address source, |
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
6834
diff
changeset
|
76 |
Ipv4Address destination); |
3820 | 77 |
void SendDestUnreach (Ipv4Header header, Ptr<const Packet> orgData, |
7176
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
6834
diff
changeset
|
78 |
uint8_t code, uint16_t nextHopMtu); |
3820 | 79 |
void SendMessage (Ptr<Packet> packet, Ipv4Address dest, uint8_t type, uint8_t code); |
4472
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
3820
diff
changeset
|
80 |
void SendMessage (Ptr<Packet> packet, Ipv4Address source, Ipv4Address dest, uint8_t type, uint8_t code, Ptr<Ipv4Route> route); |
3820 | 81 |
void Forward (Ipv4Address source, Icmpv4Header icmp, |
7176
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
6834
diff
changeset
|
82 |
uint32_t info, Ipv4Header ipHeader, |
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
6834
diff
changeset
|
83 |
const uint8_t payload[8]); |
3820 | 84 |
|
85 |
virtual void DoDispose (void); |
|
86 |
||
87 |
Ptr<Node> m_node; |
|
7717
cfa1741013dd
Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents:
7256
diff
changeset
|
88 |
IpL4Protocol::DownTargetCallback m_downTarget; |
3820 | 89 |
}; |
90 |
||
91 |
} // namespace ns3 |
|
92 |
||
93 |
#endif /* ICMPV4_L4_PROTOCOL_H */ |