src/node/udp-socket.h
changeset 4472 e20a31541404
parent 3820 c04ecfdce1ef
--- a/src/node/udp-socket.h	Thu May 28 20:16:56 2009 +0200
+++ b/src/node/udp-socket.h	Thu May 28 21:37:25 2009 -0700
@@ -40,7 +40,8 @@
  * \brief (abstract) base class of all UdpSockets
  *
  * This class exists solely for hosting UdpSocket attributes that can
- * be reused across different implementations.
+ * be reused across different implementations, and for declaring
+ * UDP-specific multicast API.
  */
 class UdpSocket : public Socket
 {
@@ -50,14 +51,64 @@
   UdpSocket (void);
   virtual ~UdpSocket (void);
 
+  /**
+   * \brief Corresponds to socket option MCAST_JOIN_GROUP
+   *
+   * \param interface interface number, or 0
+   * \param groupAddress multicast group address
+   * \returns on success, zero is returned.  On error, -1 is returned,
+   *          and errno is set appropriately
+   *
+   * Enable reception of multicast datagrams for this socket on the
+   * interface number specified.  If zero is specified as
+   * the interface, then a single local interface is chosen by
+   * system.  In the future, this function will generate trigger IGMP
+   * joins as necessary when IGMP is implemented, but for now, this
+   * just enables multicast datagram reception in the system if not already
+   * enabled for this interface/groupAddress combination.
+   *
+   * \attention IGMP is not yet implemented in ns-3
+   *
+   * This function may be called repeatedly on a given socket but each
+   * join must be for a different multicast address, or for the same
+   * multicast address but on a different interface from previous joins.
+   * This enables host multihoming, and the ability to join the same 
+   * group on different interfaces.
+   */
+  virtual int MulticastJoinGroup (uint32_t interface, const Address &groupAddress) = 0;
+
+  /**
+   * \brief Corresponds to socket option MCAST_LEAVE_GROUP
+   *
+   * \param interface interface number, or 0
+   * \param groupAddress multicast group address
+   * \returns on success, zero is returned.  On error, -1 is returned,
+   *          and errno is set appropriately
+   *
+   * Disable reception of multicast datagrams for this socket on the
+   * interface number specified.  If zero is specified as
+   * the interfaceIndex, then a single local interface is chosen by
+   * system.  In the future, this function will generate trigger IGMP
+   * leaves as necessary when IGMP is implemented, but for now, this
+   * just disables multicast datagram reception in the system if this
+   * socket is the last for this interface/groupAddress combination.
+   *
+   * \attention IGMP is not yet implemented in ns-3
+   */
+  virtual int MulticastLeaveGroup (uint32_t interface, const Address &groupAddress) = 0;
+
 private:
   // Indirect the attribute setting and getting through private virtual methods
   virtual void SetRcvBufSize (uint32_t size) = 0;
   virtual uint32_t GetRcvBufSize (void) const = 0;
-  virtual void SetIpTtl (uint32_t ipTtl) = 0;
-  virtual uint32_t GetIpTtl (void) const = 0;
-  virtual void SetIpMulticastTtl (uint32_t ipTtl) = 0;
-  virtual uint32_t GetIpMulticastTtl (void) const = 0;
+  virtual void SetIpTtl (uint8_t ipTtl) = 0;
+  virtual uint8_t GetIpTtl (void) const = 0;
+  virtual void SetIpMulticastTtl (uint8_t ipTtl) = 0;
+  virtual uint8_t GetIpMulticastTtl (void) const = 0;
+  virtual void SetIpMulticastIf (int32_t ipIf) = 0;
+  virtual int32_t GetIpMulticastIf (void) const = 0;
+  virtual void SetIpMulticastLoop (bool loop) = 0;
+  virtual bool GetIpMulticastLoop (void) const = 0;
   virtual void SetMtuDiscover (bool discover) = 0;
   virtual bool GetMtuDiscover (void) const = 0;
 };