A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
ipv6-raw-socket-impl.h
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2007-2009 Strasbourg University
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  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
19  */
20 
21 #ifndef IPV6_RAW_SOCKET_IMPL_H
22 #define IPV6_RAW_SOCKET_IMPL_H
23 
24 #include <list>
25 
26 #include "ns3/socket.h"
27 #include "ns3/ipv6-address.h"
28 #include "ns3/ipv6-header.h"
29 
30 namespace ns3
31 {
32 
33 class NetDevice;
34 class Node;
35 
64 class Ipv6RawSocketImpl : public Socket
65 {
66 public:
71  static TypeId GetTypeId ();
72 
77 
81  virtual ~Ipv6RawSocketImpl ();
82 
87  void SetNode (Ptr<Node> node);
88 
93  virtual enum Socket::SocketErrno GetErrno () const;
94 
99  virtual enum Socket::SocketType GetSocketType () const;
100 
105  virtual Ptr<Node> GetNode () const;
106 
112  virtual int Bind (const Address& address);
113 
118  virtual int Bind ();
119  virtual int Bind6 ();
120 
126  virtual int GetSockName (Address& address) const;
127 
132  virtual int Close ();
133 
138  virtual int ShutdownSend ();
139 
144  virtual int ShutdownRecv ();
145 
151  virtual int Connect (const Address& address);
152 
157  virtual int Listen ();
158 
163  virtual uint32_t GetTxAvailable () const;
164 
169  virtual uint32_t GetRxAvailable () const;
170 
177  virtual int Send (Ptr<Packet> p, uint32_t flags);
178 
186  virtual int SendTo (Ptr<Packet> p, uint32_t flags, const Address& toAddress);
187 
194  virtual Ptr<Packet> Recv (uint32_t maxSize, uint32_t flags);
195 
203  virtual Ptr<Packet> RecvFrom (uint32_t maxSize, uint32_t flags, Address& fromAddress);
204 
209  void SetProtocol (uint16_t protocol);
210 
219 
220  virtual bool SetAllowBroadcast (bool allowBroadcast);
221  virtual bool GetAllowBroadcast () const;
222 
226  void Icmpv6FilterSetPassAll();
227 
232 
237  void Icmpv6FilterSetPass(uint8_t type);
238 
243  void Icmpv6FilterSetBlock(uint8_t type);
244 
250  bool Icmpv6FilterWillPass(uint8_t type);
251 
257  bool Icmpv6FilterWillBlock(uint8_t type);
258 
259 
260 private:
265  struct Data
266  {
269  uint16_t fromProtocol;
270  };
271 
275  virtual void DoDispose ();
276 
280  enum Socket::SocketErrno m_err;
281 
286 
291 
296 
300  uint16_t m_protocol;
301 
305  std::list<struct Data> m_data;
306 
311 
316 
320  typedef struct
321  {
322  uint32_t icmpv6Filt[8];
323  } icmpv6Filter;
324 
329 };
330 
331 } /* namespace ns3 */
332 
333 #endif /* IPV6_RAW_SOCKET_IMPL_H */
334 
void SetNode(Ptr< Node > node)
Set the node.
Packet header for IPv6.
Definition: ipv6-header.h:33
virtual void DoDispose()
Dispose object.
virtual int Connect(const Address &address)
Connect to address.
Ipv6Address m_src
Source address.
Ptr< Packet > Recv(void)
Read a single packet from the socket.
Definition: socket.cc:174
bool m_shutdownSend
Flag to shutdown send capability.
virtual int ShutdownSend()
Shutdown send capability.
static TypeId GetTypeId()
Get the type ID of this class.
bool ForwardUp(Ptr< const Packet > p, Ipv6Header hdr, Ptr< NetDevice > device)
Forward up to receive method.
virtual enum Socket::SocketType GetSocketType() const
Get socket type (NS3_SOCK_RAW)
virtual enum Socket::SocketErrno GetErrno() const
Get last error number.
virtual int Send(Ptr< Packet > p, uint32_t flags)
Send a packet.
a polymophic address class
Definition: address.h:86
virtual int Bind()
Bind socket.
bool m_shutdownRecv
Flag to shutdown receive capability.
A low-level Socket API based loosely on the BSD Socket API.A few things to keep in mind about this ty...
Definition: socket.h:66
std::list< struct Data > m_data
Packet waiting to be processed.
virtual int GetSockName(Address &address) const
Get socket address.
void Icmpv6FilterSetBlock(uint8_t type)
Set the filter to block one ICMPv6 type.
virtual int Bind6()
Allocate a local IPv6 endpoint for this socket.
virtual Ptr< Node > GetNode() const
Get node.
IPv6 raw data and additional information.
Struct to hold the ICMPv6 filter.
virtual int Listen()
Listen.
bool Icmpv6FilterWillBlock(uint8_t type)
Ask the filter about the status of one ICMPv6 type.
void Icmpv6FilterSetPass(uint8_t type)
Set the filter to pass one ICMPv6 type.
virtual ~Ipv6RawSocketImpl()
Destructor.
icmpv6Filter m_icmpFilter
ICMPv6 filter.
virtual Ptr< Packet > RecvFrom(uint32_t maxSize, uint32_t flags, Address &fromAddress)
Receive packet.
virtual bool SetAllowBroadcast(bool allowBroadcast)
Configure whether broadcast datagram transmissions are allowed.
virtual uint32_t GetRxAvailable() const
Get RX size available.
void SetProtocol(uint16_t protocol)
Set protocol field.
Describes an IPv6 address.
Definition: ipv6-address.h:44
virtual uint32_t GetTxAvailable() const
Get TX size available.
enum Socket::SocketErrno m_err
Last error number.
virtual int SendTo(Ptr< Packet > p, uint32_t flags, const Address &toAddress)
Send a packet.
virtual int Close()
Close the socket.
Ipv6Address m_dst
Destination address.
bool Icmpv6FilterWillPass(uint8_t type)
Ask the filter about the status of one ICMPv6 type.
void Icmpv6FilterSetPassAll()
Clean the ICMPv6 filter structure.
virtual int ShutdownRecv()
Shutdown receive capability.
virtual bool GetAllowBroadcast() const
Query whether broadcast datagram transmissions are allowed.
a unique identifier for an interface.
Definition: type-id.h:44
uint16_t m_protocol
Protocol.
void Icmpv6FilterSetBlockAll()
Set the filter to block all the ICMPv6 types.