A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
packet-socket.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2007 Emmanuelle Laprise, INRIA
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Authors: Emmanuelle Laprise <emmanuelle.laprise@bluekazoo.ca>,
19  * Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
20  */
21 #ifndef PACKET_SOCKET_H
22 #define PACKET_SOCKET_H
23 
24 #include <stdint.h>
25 #include <queue>
26 #include "ns3/callback.h"
27 #include "ns3/traced-callback.h"
28 #include "ns3/ptr.h"
29 #include "ns3/socket.h"
30 #include "ns3/net-device.h"
31 
32 namespace ns3 {
33 
34 class Node;
35 class Packet;
36 class NetDevice;
37 class PacketSocketAddress;
38 
78 class PacketSocket : public Socket
79 {
80 public:
81  static TypeId GetTypeId (void);
82 
83  PacketSocket ();
84  virtual ~PacketSocket ();
85 
86  void SetNode (Ptr<Node> node);
87 
88  virtual enum SocketErrno GetErrno (void) const;
89  virtual enum SocketType GetSocketType (void) const;
90  virtual Ptr<Node> GetNode (void) const;
91  virtual int Bind (void);
92  virtual int Bind6 (void);
93  virtual int Bind (const Address & address);
94  virtual int Close (void);
95  virtual int ShutdownSend (void);
96  virtual int ShutdownRecv (void);
97  virtual int Connect (const Address &address);
98  virtual int Listen (void);
99  virtual uint32_t GetTxAvailable (void) const;
100  virtual int Send (Ptr<Packet> p, uint32_t flags);
101  virtual int SendTo (Ptr<Packet> p, uint32_t flags, const Address &toAddress);
102  virtual uint32_t GetRxAvailable (void) const;
103  virtual Ptr<Packet> Recv (uint32_t maxSize, uint32_t flags);
104  virtual Ptr<Packet> RecvFrom (uint32_t maxSize, uint32_t flags,
105  Address &fromAddress);
106  virtual int GetSockName (Address &address) const;
107  virtual bool SetAllowBroadcast (bool allowBroadcast);
108  virtual bool GetAllowBroadcast () const;
109 
110 private:
111  void ForwardUp (Ptr<NetDevice> device, Ptr<const Packet> packet,
112  uint16_t protocol, const Address &from, const Address &to,
113  NetDevice::PacketType packetType);
114  int DoBind (const PacketSocketAddress &address);
115  uint32_t GetMinMtu (PacketSocketAddress ad) const;
116  virtual void DoDispose (void);
117 
118  enum State {
120  STATE_BOUND, // open and bound
121  STATE_CONNECTED, // open, bound and connected
123  };
129  uint16_t m_protocol;
131  uint32_t m_device;
133 
134  std::queue<Ptr<Packet> > m_deliveryQueue;
135  uint32_t m_rxAvailable;
136 
138 
139  // Socket options (attributes)
140  uint32_t m_rcvBufSize;
141 
142 };
143 
148 class PacketSocketTag : public Tag
149 {
150 public:
154  PacketSocketTag ();
169  void SetDestAddress(Address a);
174  Address GetDestAddress (void) const;
175 
176  static TypeId GetTypeId (void);
177  virtual TypeId GetInstanceTypeId (void) const;
178  virtual uint32_t GetSerializedSize (void) const;
179  virtual void Serialize (TagBuffer i) const;
180  virtual void Deserialize (TagBuffer i);
181  virtual void Print (std::ostream &os) const;
182 
183 private:
184  std::string m_deviceName;
187 };
192 class DeviceNameTag : public Tag
193 {
194 public:
198  DeviceNameTag ();
203  void SetDeviceName (std::string n);
208  std::string GetDeviceName (void) const;
209  static TypeId GetTypeId (void);
210  virtual TypeId GetInstanceTypeId (void) const;
211  virtual uint32_t GetSerializedSize (void) const;
212  virtual void Serialize (TagBuffer i) const;
213  virtual void Deserialize (TagBuffer i);
214  virtual void Print (std::ostream &os) const;
215 
216 private:
217  std::string m_deviceName;
218 };
219 
220 } // namespace ns3
221 
222 #endif /* PACKET_SOCKET_H */
223 
224 
static TypeId GetTypeId(void)
virtual enum SocketErrno GetErrno(void) const
Get last error number.
std::string m_deviceName
Address GetDestAddress(void) const
Get the destination address of the corresponding packet.
Ptr< Packet > Recv(void)
Read a single packet from the socket.
Definition: socket.cc:175
NetDevice::PacketType m_packetType
forward calls to a chain of CallbackAn ns3::TracedCallback has almost exactly the same API as a norma...
std::queue< Ptr< Packet > > m_deliveryQueue
Default destination address.
an address for a packet socket
virtual Ptr< Packet > RecvFrom(uint32_t maxSize, uint32_t flags, Address &fromAddress)
Read a single packet from the socket and retrieve the sender address.
virtual void DoDispose(void)
This method is called by Object::Dispose or by the object's destructor, whichever comes first...
A PacketSocket is a link between an application and a net device.
Definition: packet-socket.h:78
virtual uint32_t GetSerializedSize(void) const
void SetPacketType(NetDevice::PacketType t)
Set the packet type.
virtual int Bind(void)
Allocate a local IPv4 endpoint for this socket.
virtual void Print(std::ostream &os) const
uint32_t m_rxAvailable
virtual int GetSockName(Address &address) const
Get socket address.
SocketErrno
Enumeration of the possible errors returned by a socket.
Definition: socket.h:82
a polymophic address class
Definition: address.h:86
virtual TypeId GetInstanceTypeId(void) const
Ptr< Node > m_node
virtual void Serialize(TagBuffer i) const
A low-level Socket API based loosely on the BSD Socket API.
Definition: socket.h:66
virtual bool SetAllowBroadcast(bool allowBroadcast)
Configure whether broadcast datagram transmissions are allowed.
void SetDestAddress(Address a)
Set the destination address of the corresponding packet.
virtual int ShutdownRecv(void)
virtual void Deserialize(TagBuffer i)
enum State m_state
virtual uint32_t GetSerializedSize(void) const
static TypeId GetTypeId(void)
std::string m_deviceName
PacketSocketTag()
Create an empty PacketSocketTag.
virtual Ptr< Node > GetNode(void) const
Return the node this socket is associated with.
virtual int Listen(void)
Listen for incoming connections.
virtual uint32_t GetRxAvailable(void) const
Return number of bytes which can be returned from one or multiple calls to Recv.
tag a set of bytes in a packet
Definition: tag.h:36
virtual int Send(Ptr< Packet > p, uint32_t flags)
Send data (or dummy data) to the remote host.
virtual int SendTo(Ptr< Packet > p, uint32_t flags, const Address &toAddress)
Send data to a specified peer.
This class implements a tag that carries the ns3 device name from where a packet is coming...
virtual bool GetAllowBroadcast() const
Query whether broadcast datagram transmissions are allowed.
enum SocketErrno m_errno
virtual void Deserialize(TagBuffer i)
virtual int Close(void)
Close a socket.
void SetNode(Ptr< Node > node)
static TypeId GetTypeId(void)
read and write tag data
Definition: tag-buffer.h:51
int DoBind(const PacketSocketAddress &address)
virtual uint32_t GetTxAvailable(void) const
Returns the number of bytes which can be sent in a single call to Send.
virtual void Serialize(TagBuffer i) const
virtual ~PacketSocket()
NetDevice::PacketType GetPacketType(void) const
Get the packet type.
virtual void Print(std::ostream &os) const
DeviceNameTag()
Create an empty DeviceNameTag.
virtual TypeId GetInstanceTypeId(void) const
virtual int Connect(const Address &address)
Initiate a connection to a remote host.
uint32_t GetMinMtu(PacketSocketAddress ad) const
virtual int Bind6(void)
Allocate a local IPv6 endpoint for this socket.
std::string GetDeviceName(void) const
Get the device name from where the corresponding packet is coming.
tuple address
Definition: first.py:37
PacketType
Packet types are used as they are in Linux.
Definition: net-device.h:270
This class implements a tag that carries the dest address of a packet and the packet type...
TracedCallback< Ptr< const Packet > > m_dropTrace
virtual int ShutdownSend(void)
SocketType
Enumeration of the possible socket types.
Definition: socket.h:104
a unique identifier for an interface.
Definition: type-id.h:49
virtual enum SocketType GetSocketType(void) const
void ForwardUp(Ptr< NetDevice > device, Ptr< const Packet > packet, uint16_t protocol, const Address &from, const Address &to, NetDevice::PacketType packetType)
void SetDeviceName(std::string n)
Set the device name.