author | Tom Henderson <tomh@tomh.org> |
Sun, 21 Jun 2009 22:29:08 -0700 | |
changeset 4571 | 2c9c600270e0 |
parent 4558 | 31e9053749bb |
child 6442 | f380cf1aa4d8 |
permissions | -rw-r--r-- |
3820 | 1 |
#ifndef ICMPV4_L4_PROTOCOL_H |
2 |
#define ICMPV4_L4_PROTOCOL_H |
|
3 |
||
4 |
#include "ipv4-l4-protocol.h" |
|
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 |
|
14 |
class Icmpv4L4Protocol : public Ipv4L4Protocol |
|
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; |
|
27 |
virtual enum Ipv4L4Protocol::RxStatus Receive(Ptr<Packet> p, |
|
28 |
const Ipv4Address &source, |
|
29 |
const Ipv4Address &destination, |
|
30 |
Ptr<Ipv4Interface> incomingInterface); |
|
31 |
||
32 |
void SendDestUnreachFragNeeded (Ipv4Header header, Ptr<const Packet> orgData, uint16_t nextHopMtu); |
|
33 |
void SendTimeExceededTtl (Ipv4Header header, Ptr<const Packet> orgData); |
|
34 |
void SendDestUnreachPort (Ipv4Header header, Ptr<const Packet> orgData); |
|
4472
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
3820
diff
changeset
|
35 |
protected: |
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
3820
diff
changeset
|
36 |
/* |
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
3820
diff
changeset
|
37 |
* 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
|
38 |
* 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
|
39 |
*/ |
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
3820
diff
changeset
|
40 |
virtual void NotifyNewAggregate (); |
3820 | 41 |
private: |
42 |
void HandleEcho (Ptr<Packet> p, |
|
43 |
Icmpv4Header header, |
|
44 |
Ipv4Address source, |
|
45 |
Ipv4Address destination); |
|
46 |
void HandleDestUnreach (Ptr<Packet> p, |
|
47 |
Icmpv4Header header, |
|
48 |
Ipv4Address source, |
|
49 |
Ipv4Address destination); |
|
50 |
void HandleTimeExceeded (Ptr<Packet> p, |
|
51 |
Icmpv4Header icmp, |
|
52 |
Ipv4Address source, |
|
53 |
Ipv4Address destination); |
|
54 |
void SendDestUnreach (Ipv4Header header, Ptr<const Packet> orgData, |
|
55 |
uint8_t code, uint16_t nextHopMtu); |
|
56 |
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
|
57 |
void SendMessage (Ptr<Packet> packet, Ipv4Address source, Ipv4Address dest, uint8_t type, uint8_t code, Ptr<Ipv4Route> route); |
3820 | 58 |
void Forward (Ipv4Address source, Icmpv4Header icmp, |
59 |
uint32_t info, Ipv4Header ipHeader, |
|
60 |
const uint8_t payload[8]); |
|
61 |
||
62 |
virtual void DoDispose (void); |
|
63 |
||
64 |
Ptr<Node> m_node; |
|
65 |
}; |
|
66 |
||
67 |
} // namespace ns3 |
|
68 |
||
69 |
#endif /* ICMPV4_L4_PROTOCOL_H */ |