[MERGED] osmocom-bb[master]: VIRT-PHY: mcast_sock: Don't keep subscribed multicast group ...

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/.

Harald Welte gerrit-no-reply at lists.osmocom.org
Thu Jul 13 12:36:59 UTC 2017


Harald Welte has submitted this change and it was merged.

Change subject: VIRT-PHY: mcast_sock: Don't keep subscribed multicast group around
......................................................................


VIRT-PHY: mcast_sock: Don't keep subscribed multicast group around

We can avoid having to keep around the multicast group in a chunk of
dynamically allocated memory and simplify related code.

Change-Id: Ic39ffe73dfd2cb8ffefb9614340e275dac87bd50
---
M src/host/virt_phy/include/virtphy/osmo_mcast_sock.h
M src/host/virt_phy/src/shared/osmo_mcast_sock.c
2 files changed, 7 insertions(+), 11 deletions(-)

Approvals:
  Harald Welte: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/src/host/virt_phy/include/virtphy/osmo_mcast_sock.h b/src/host/virt_phy/include/virtphy/osmo_mcast_sock.h
index 3c5954d..ba5237a 100644
--- a/src/host/virt_phy/include/virtphy/osmo_mcast_sock.h
+++ b/src/host/virt_phy/include/virtphy/osmo_mcast_sock.h
@@ -9,7 +9,6 @@
 
 struct mcast_client_sock {
 	struct osmo_fd osmo_fd;
-	struct ip_mreq *mcast_group;
 };
 
 struct mcast_bidir_sock {
diff --git a/src/host/virt_phy/src/shared/osmo_mcast_sock.c b/src/host/virt_phy/src/shared/osmo_mcast_sock.c
index a06d706..b42a5e4 100644
--- a/src/host/virt_phy/src/shared/osmo_mcast_sock.c
+++ b/src/host/virt_phy/src/shared/osmo_mcast_sock.c
@@ -47,10 +47,8 @@
 			void *osmo_fd_data)
 {
 	struct mcast_client_sock *client_sock = talloc_zero(ctx, struct mcast_client_sock);
+	struct ip_mreq mreq;
 	int rc, loopback = 1, all = 0;
-
-	/* TODO: why allocate those dynamically ?!? */
-	client_sock->mcast_group = talloc_zero(client_sock, struct ip_mreq);
 
 	client_sock->osmo_fd.cb = fd_rx_cb;
 	client_sock->osmo_fd.when = BSC_FD_READ;
@@ -75,10 +73,10 @@
 	}
 
 	/* Configure and join the multicast group */
-	client_sock->mcast_group->imr_multiaddr.s_addr = inet_addr(mcast_group);
-	client_sock->mcast_group->imr_interface.s_addr = htonl(INADDR_ANY);
-	rc = setsockopt(client_sock->osmo_fd.fd, IPPROTO_IP, IP_ADD_MEMBERSHIP,
-			client_sock->mcast_group, sizeof(*client_sock->mcast_group));
+	memset(&mreq, 0, sizeof(mreq));
+	mreq.imr_multiaddr.s_addr = inet_addr(mcast_group);
+	mreq.imr_interface.s_addr = htonl(INADDR_ANY);
+	rc = setsockopt(client_sock->osmo_fd.fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq));
 	if (rc < 0) {
 		perror("Failed to join to mcast goup");
 		return NULL;
@@ -137,13 +135,12 @@
 
 void mcast_client_sock_close(struct mcast_client_sock *client_sock)
 {
-	setsockopt(client_sock->osmo_fd.fd, IPPROTO_IP, IP_DROP_MEMBERSHIP,
-		   client_sock->mcast_group, sizeof(*client_sock->mcast_group));
+	/* multicast memberships of socket are implicitly dropped when
+	 * socket is closed */
 	osmo_fd_unregister(&client_sock->osmo_fd);
 	client_sock->osmo_fd.fd = -1;
 	client_sock->osmo_fd.when = 0;
 	close(client_sock->osmo_fd.fd);
-	talloc_free(client_sock->mcast_group);
 	talloc_free(client_sock);
 
 }

-- 
To view, visit https://gerrit.osmocom.org/3233
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ic39ffe73dfd2cb8ffefb9614340e275dac87bd50
Gerrit-PatchSet: 1
Gerrit-Project: osmocom-bb
Gerrit-Branch: master
Gerrit-Owner: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Jenkins Builder



More information about the gerrit-log mailing list