X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FProtocols%2FINet%2FMulticastSocketProtocol.hh;h=cf80740753939800b249aead82791cf33de89852;hb=9ded1690d676ba7c7054a7a272debf99102f94c0;hp=e8249ce003fc1b41481de2992b176c82ce944653;hpb=7a4d13b962b9cd20e2e0bad0753a9bb1ca3219c4;p=senf.git diff --git a/Socket/Protocols/INet/MulticastSocketProtocol.hh b/Socket/Protocols/INet/MulticastSocketProtocol.hh index e8249ce..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,9 +128,32 @@ 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 + + This implementation supports INet6 mapped INet4 multicast addresses. This is a linux + specific extension and NOT part of the relevant RFCs. */ class INet6MulticastSocketProtocol : public MulticastSocketProtocol @@ -139,14 +165,6 @@ namespace senf { groups received. The group is joined on the default interface. \param[in] mcAddr address of group to join */ - void mcAddMembership(INet6Address const & mcAddr, INet6Address const & localAddr) - const; - ///< join multicast group on a specific interface - /**< This member will add \a mcAddr to the list of multicast - groups received. The group is joined on the interface - with the given local address. - \param[in] mcAddr address of group to join - \param[in] localAddr address of interface to join on */ void mcAddMembership(INet6Address const & mcAddr, std::string const & iface); ///< join multicast group on a specific interface /**< This member will add \a mcAddr to the list of multicast @@ -161,23 +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, INet6Address const & localAddr) - 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] localAddr address of interface to leave - from */ - 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 */ }; ///\}