00001 #ifndef IPV4_RAW_SOCKET_IMPL_H 00002 #define IPV4_RAW_SOCKET_IMPL_H 00003 00004 #include "ns3/socket.h" 00005 #include "ns3/ipv4-header.h" 00006 #include <list> 00007 00008 namespace ns3 { 00009 00010 class NetDevice; 00011 class Node; 00012 00013 class Ipv4RawSocketImpl : public Socket 00014 { 00015 public: 00016 static TypeId GetTypeId (void); 00017 00018 Ipv4RawSocketImpl (); 00019 00020 void SetNode (Ptr<Node> node); 00021 00022 virtual enum Socket::SocketErrno GetErrno (void) const; 00023 virtual Ptr<Node> GetNode (void) const; 00024 virtual int Bind (const Address &address); 00025 virtual int Bind (); 00026 virtual int GetSockName (Address &address) const; 00027 virtual int Close (void); 00028 virtual int ShutdownSend (void); 00029 virtual int ShutdownRecv (void); 00030 virtual int Connect (const Address &address); 00031 virtual int Listen (void); 00032 virtual uint32_t GetTxAvailable (void) const; 00033 virtual int Send (Ptr<Packet> p, uint32_t flags); 00034 virtual int SendTo (Ptr<Packet> p, uint32_t flags, 00035 const Address &toAddress); 00036 virtual uint32_t GetRxAvailable (void) const; 00037 virtual Ptr<Packet> Recv (uint32_t maxSize, uint32_t flags); 00038 virtual Ptr<Packet> RecvFrom (uint32_t maxSize, uint32_t flags, 00039 Address &fromAddress); 00040 00041 void SetProtocol (uint16_t protocol); 00042 bool ForwardUp (Ptr<const Packet> p, Ipv4Header ipHeader, Ptr<NetDevice> device); 00043 private: 00044 virtual void DoDispose (void); 00045 00046 struct Data { 00047 Ptr<Packet> packet; 00048 Ipv4Address fromIp; 00049 uint16_t fromProtocol; 00050 }; 00051 00052 enum Socket::SocketErrno m_err; 00053 Ptr<Node> m_node; 00054 Ipv4Address m_src; 00055 Ipv4Address m_dst; 00056 uint16_t m_protocol; 00057 std::list<struct Data> m_recv; 00058 bool m_shutdownSend; 00059 bool m_shutdownRecv; 00060 uint32_t m_icmpFilter; 00061 }; 00062 00063 } // namespace ns3 00064 00065 #endif /* IPV4_RAW_SOCKET_IMPL_H */