X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FProtocols%2FINet%2FMulticastSocketProtocol.hh;h=cf80740753939800b249aead82791cf33de89852;hb=9ded1690d676ba7c7054a7a272debf99102f94c0;hp=0de6997b53de6e33698765d4c97ca6054d657b63;hpb=a634d4df375e12f0a9dcd0014f1ee14b70de16b8;p=senf.git diff --git a/Socket/Protocols/INet/MulticastSocketProtocol.hh b/Socket/Protocols/INet/MulticastSocketProtocol.hh index 0de6997..cf80740 100644 --- a/Socket/Protocols/INet/MulticastSocketProtocol.hh +++ b/Socket/Protocols/INet/MulticastSocketProtocol.hh @@ -40,6 +40,9 @@ namespace senf { ///\{ /** \brief Generic addressing type independent multicast protocol facet + + \todo implement complete new multicast API from RFC3678 (as far as supported by linux) + \bug mcLeaveSSMSource fails with EADDRNOTAVAIL */ class MulticastSocketProtocol : public virtual SocketProtocol @@ -125,6 +128,26 @@ namespace senf { interface with the given local address. \param[in] mcAddr address of group to leave \param[in] iface interface name */ + + void mcJoinSSMSource(INet4Address const & group, INet4Address const & source, + std::string const & iface) const; + ///< join SSM multicast group + /**< This call will join the multicast group \a group for + traffic from \a source. A single group may be joined + multiple times on different sources. + \param[in] group multicast group to join + \param[in] source SSM multicast source to join the + group on + \param[in] iface interface to join the group on */ + void mcLeaveSSMSource(INet4Address const & group, INet4Address const & source, + std::string const & iface) const; + ///< leave SSM multicast group + /**< This call will leave the multicast group \a group for + traffic from \a source. + \param[in] group multicast group to leave + \param[in] source SSM multicast source to leave the + group from + \param[in] iface interface to leave the group on */ }; /** \brief Multicast protocol facet for INet6 addressable multicast enabled sockets @@ -156,14 +179,33 @@ namespace senf { multicast groups received. The group is left from the default interface. \param[in] mcAddr address of group to leave */ - void mcDropMembership(INet6Address const & mcAddr, std::string const & iface) - const; + void mcDropMembership(INet6Address const & mcAddr, std::string const & iface) const; ///< leave multicast group on a specific interface /**< This member will remove \a mcAddr from the list of multicast groups received. The group is left from the interface with the given local address. \param[in] mcAddr address of group to leave \param[in] iface interface name */ + + void mcJoinSSMSource(INet6Address const & group, INet6Address const & source, + std::string const & iface) const; + ///< join SSM multicast group + /**< This call will join the multicast group \a group for + traffic from \a source. A single group may be joined + multiple times on different sources. + \param[in] group multicast group to join + \param[in] source SSM multicast source to join the + group on + \param[in] iface interface to join the group on */ + void mcLeaveSSMSource(INet6Address const & group, INet6Address const & source, + std::string const & iface) const; + ///< leave SSM multicast group + /**< This call will leave the multicast group \a group for + traffic from \a source. + \param[in] group multicast group to leave + \param[in] source SSM multicast source to leave the + group from + \param[in] iface interface to leave the group on */ }; ///\}