Bug 1318 - Clarify the Ipv6RawSocket documentation.
authorTommaso Pecorella <tommaso.pecorella@unifi.it>
Tue, 20 Dec 2011 18:57:31 +0100
changeset 7650 46bfff3026b7
parent 7649 85e69ef407d7
child 7651 1cec7507c565
Bug 1318 - Clarify the Ipv6RawSocket documentation.
src/internet/model/ipv6-raw-socket-factory.h
src/internet/model/ipv6-raw-socket-impl.h
--- a/src/internet/model/ipv6-raw-socket-factory.h	Sun Dec 18 21:30:46 2011 -0800
+++ b/src/internet/model/ipv6-raw-socket-factory.h	Tue Dec 20 18:57:31 2011 +0100
@@ -35,6 +35,29 @@
  *
  * This abstract class defines the API for IPv6 RAW socket factory.
  * 
+ * A RAW Socket typically is used to access specific IP layers not usually
+ * available through L4 sockets, e.g., ICMP. The implementer should take
+ * particular care to define the Ipv6RawSocketImpl Attributes, and in
+ * particular the Protocol attribute.
+ * Not setting it will result in a zero protocol at IP level (corresponding
+ * to the HopByHop IPv6 Extension header, i.e., Ipv6ExtensionHopByHopHeader)
+ * when sending data through the socket, which is probably not the intended
+ * behavior.
+ *
+ * A correct example is (from src/applications/model/radvd.cc):
+ * \code
+   if (!m_socket)
+     {
+       TypeId tid = TypeId::LookupByName ("ns3::Ipv6RawSocketFactory");
+       m_socket = Socket::CreateSocket (GetNode (), tid);
+
+       NS_ASSERT (m_socket);
+
+       m_socket->SetAttribute ("Protocol", UintegerValue(Ipv6Header::IPV6_ICMPV6));
+       m_socket->SetRecvCallback (MakeCallback (&Radvd::HandleRead, this));
+     }
+ * \endcode
+ *
  */
 class Ipv6RawSocketFactory : public SocketFactory
 {
--- a/src/internet/model/ipv6-raw-socket-impl.h	Sun Dec 18 21:30:46 2011 -0800
+++ b/src/internet/model/ipv6-raw-socket-impl.h	Tue Dec 20 18:57:31 2011 +0100
@@ -36,6 +36,30 @@
 /**
  * \class Ipv6RawSocketImpl
  * \brief IPv6 raw socket.
+ *
+ * A RAW Socket typically is used to access specific IP layers not usually
+ * available through L4 sockets, e.g., ICMP. The implementer should take
+ * particular care to define the Ipv6RawSocketImpl Attributes, and in
+ * particular the Protocol attribute.
+ * Not setting it will result in a zero protocol at IP level (corresponding
+ * to the HopByHop IPv6 Extension header, i.e., Ipv6ExtensionHopByHopHeader)
+ * when sending data through the socket, which is probably not the intended
+ * behavior.
+ *
+ * A correct example is (from src/applications/model/radvd.cc):
+ * \code
+   if (!m_socket)
+     {
+       TypeId tid = TypeId::LookupByName ("ns3::Ipv6RawSocketFactory");
+       m_socket = Socket::CreateSocket (GetNode (), tid);
+
+       NS_ASSERT (m_socket);
+
+       m_socket->SetAttribute ("Protocol", UintegerValue(Ipv6Header::IPV6_ICMPV6));
+       m_socket->SetRecvCallback (MakeCallback (&Radvd::HandleRead, this));
+     }
+ * \endcode
+ *
  */
 class Ipv6RawSocketImpl : public Socket
 {