This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
laforge gerrit-no-reply at lists.osmocom.orglaforge has submitted this change. ( https://gerrit.osmocom.org/c/libosmocore/+/17418 ) Change subject: socket: Add osmo_sock_mcast_iface_set() to bind multicast to device ...................................................................... socket: Add osmo_sock_mcast_iface_set() to bind multicast to device Change-Id: Ib52d22710020b56965aefcef09bde8247ace4a9c Related: OS#2966 --- M include/osmocom/core/socket.h M src/socket.c 2 files changed, 23 insertions(+), 0 deletions(-) Approvals: laforge: Looks good to me, approved fixeria: Looks good to me, but someone else must approve Jenkins Builder: Verified diff --git a/include/osmocom/core/socket.h b/include/osmocom/core/socket.h index e26ca0d..129612c 100644 --- a/include/osmocom/core/socket.h +++ b/include/osmocom/core/socket.h @@ -87,6 +87,7 @@ int osmo_sock_mcast_loop_set(int fd, bool enable); int osmo_sock_mcast_ttl_set(int fd, uint8_t ttl); int osmo_sock_mcast_all_set(int fd, bool enable); +int osmo_sock_mcast_iface_set(int fd, const char *ifname); int osmo_sock_mcast_subscribe(int fd, const char *grp_addr); int osmo_sock_local_ip(char *local_ip, const char *remote_ip); diff --git a/src/socket.c b/src/socket.c index 9b1d30e..503ceaf 100644 --- a/src/socket.c +++ b/src/socket.c @@ -41,6 +41,7 @@ #include <sys/socket.h> #include <sys/types.h> #include <sys/un.h> +#include <net/if.h> #include <netinet/in.h> #include <arpa/inet.h> @@ -1194,6 +1195,27 @@ } } +/*! Set the network device to which we should bind the multicast socket + * \param[in] fd file descriptor of related socket + * \param[in] ifname name of network interface to user for multicast + * \returns 0 on success; negative otherwise */ +int osmo_sock_mcast_iface_set(int fd, const char *ifname) +{ + unsigned int ifindex; + struct ip_mreqn mr; + + /* first, resolve interface name to ifindex */ + ifindex = if_nametoindex(ifname); + if (ifindex == 0) + return -errno; + + /* next, configure kernel to use that ifindex for this sockets multicast traffic */ + memset(&mr, 0, sizeof(mr)); + mr.imr_ifindex = ifindex; + return setsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF, &mr, sizeof(mr)); +} + + /*! Enable/disable receiving all multicast packets, even for non-subscribed groups * \param[in] fd file descriptor of related socket * \param[in] enable Enable or Disable receiving of all packets -- To view, visit https://gerrit.osmocom.org/c/libosmocore/+/17418 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: libosmocore Gerrit-Branch: master Gerrit-Change-Id: Ib52d22710020b56965aefcef09bde8247ace4a9c Gerrit-Change-Number: 17418 Gerrit-PatchSet: 5 Gerrit-Owner: laforge <laforge at osmocom.org> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: fixeria <axilirator at gmail.com> Gerrit-Reviewer: laforge <laforge at osmocom.org> Gerrit-Reviewer: pespin <pespin at sysmocom.de> Gerrit-CC: neels <nhofmeyr at sysmocom.de> Gerrit-MessageType: merged -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20200310/851edef1/attachment.htm>