3820
|
1 |
#ifndef IPV4_RAW_SOCKET_IMPL_H
|
|
2 |
#define IPV4_RAW_SOCKET_IMPL_H
|
|
3 |
|
|
4 |
#include "ns3/socket.h"
|
|
5 |
#include "ns3/ipv4-header.h"
|
|
6 |
#include <list>
|
|
7 |
|
|
8 |
namespace ns3 {
|
|
9 |
|
|
10 |
class NetDevice;
|
|
11 |
class Node;
|
|
12 |
|
|
13 |
class Ipv4RawSocketImpl : public Socket
|
|
14 |
{
|
|
15 |
public:
|
|
16 |
static TypeId GetTypeId (void);
|
|
17 |
|
|
18 |
Ipv4RawSocketImpl ();
|
|
19 |
|
|
20 |
void SetNode (Ptr<Node> node);
|
|
21 |
|
|
22 |
virtual enum Socket::SocketErrno GetErrno (void) const;
|
|
23 |
virtual Ptr<Node> GetNode (void) const;
|
|
24 |
virtual int Bind (const Address &address);
|
|
25 |
virtual int Bind ();
|
|
26 |
virtual int GetSockName (Address &address) const;
|
|
27 |
virtual int Close (void);
|
|
28 |
virtual int ShutdownSend (void);
|
|
29 |
virtual int ShutdownRecv (void);
|
|
30 |
virtual int Connect (const Address &address);
|
|
31 |
virtual int Listen (void);
|
|
32 |
virtual uint32_t GetTxAvailable (void) const;
|
|
33 |
virtual int Send (Ptr<Packet> p, uint32_t flags);
|
|
34 |
virtual int SendTo (Ptr<Packet> p, uint32_t flags,
|
|
35 |
const Address &toAddress);
|
|
36 |
virtual uint32_t GetRxAvailable (void) const;
|
|
37 |
virtual Ptr<Packet> Recv (uint32_t maxSize, uint32_t flags);
|
|
38 |
virtual Ptr<Packet> RecvFrom (uint32_t maxSize, uint32_t flags,
|
|
39 |
Address &fromAddress);
|
|
40 |
|
|
41 |
void SetProtocol (uint16_t protocol);
|
|
42 |
bool ForwardUp (Ptr<const Packet> p, Ipv4Header ipHeader, Ptr<NetDevice> device);
|
|
43 |
private:
|
|
44 |
virtual void DoDispose (void);
|
|
45 |
|
|
46 |
struct Data {
|
|
47 |
Ptr<Packet> packet;
|
|
48 |
Ipv4Address fromIp;
|
|
49 |
uint16_t fromProtocol;
|
|
50 |
};
|
|
51 |
|
|
52 |
enum Socket::SocketErrno m_err;
|
|
53 |
Ptr<Node> m_node;
|
|
54 |
Ipv4Address m_src;
|
|
55 |
Ipv4Address m_dst;
|
|
56 |
uint16_t m_protocol;
|
|
57 |
std::list<struct Data> m_recv;
|
|
58 |
bool m_shutdownSend;
|
|
59 |
bool m_shutdownRecv;
|
|
60 |
uint32_t m_icmpFilter;
|
|
61 |
};
|
|
62 |
|
|
63 |
} // namespace ns3
|
|
64 |
|
|
65 |
#endif /* IPV4_RAW_SOCKET_IMPL_H */
|