packages/net/net-mtools/patches/001-mreceive-refactor-multicast-joining-to-separate-func.patch
Christian Marangi 4470062c16
net-mtools: Add new package to debug multicast setups
Add new package to debug multicast setups. This is required to use
kselftests script for network testing.

net-mtools is used instead of mtools as it does conflicts with another
package that is also called mtools.

Some additional patch from Vladimir Oltean are added to make the tool
works on kernel selftests scripts.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
2023-07-07 13:24:30 +02:00

66 lines
2 KiB
Diff

From 0cfc04eac370ee33118e17a298d4739c94cacc73 Mon Sep 17 00:00:00 2001
From: Vladimir Oltean <vladimir.oltean@nxp.com>
Date: Tue, 19 Apr 2022 12:28:03 +0300
Subject: [PATCH 1/6] mreceive: refactor multicast joining to separate function
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
---
mreceive.c | 33 ++++++++++++++++++---------------
1 file changed, 18 insertions(+), 15 deletions(-)
--- a/mreceive.c
+++ b/mreceive.c
@@ -61,12 +61,27 @@ Usage: mreceive [-g GROUP] [-p PORT] [-i
-h Print the command usage.\n\n", VERSION);
}
+static void igmp_join(int s, in_addr_t multiaddr, in_addr_t interface)
+{
+ struct ip_mreq mreq;
+ int ret;
+
+ mreq.imr_multiaddr.s_addr = multiaddr;
+ mreq.imr_interface.s_addr = interface;
+
+ ret = setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP,
+ (char *)&mreq, sizeof(mreq));
+ if (ret == SOCKET_ERROR) {
+ printf("setsockopt() IP_ADD_MEMBERSHIP failed.\n");
+ exit(1);
+ }
+}
+
int main(int argc, char *argv[])
{
struct sockaddr_in stLocal, stFrom;
unsigned char achIn[BUFSIZE];
int s, i;
- struct ip_mreq stMreq;
int iTmp, iRet;
int ipnum = 0;
int ii;
@@ -153,22 +168,10 @@ int main(int argc, char *argv[])
/* join the multicast group. */
if (!ipnum) { /* single interface */
- stMreq.imr_multiaddr.s_addr = inet_addr(TEST_ADDR);
- stMreq.imr_interface.s_addr = INADDR_ANY;
- iRet = setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&stMreq, sizeof(stMreq));
- if (iRet == SOCKET_ERROR) {
- printf("setsockopt() IP_ADD_MEMBERSHIP failed.\n");
- exit(1);
- }
+ igmp_join(s, inet_addr(TEST_ADDR), INADDR_ANY);
} else {
for (i = 0; i < ipnum; i++) {
- stMreq.imr_multiaddr.s_addr = inet_addr(TEST_ADDR);
- stMreq.imr_interface.s_addr = IP[i];
- iRet = setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&stMreq, sizeof(stMreq));
- if (iRet == SOCKET_ERROR) {
- printf("setsockopt() IP_ADD_MEMBERSHIP failed.\n");
- exit(1);
- }
+ igmp_join(s, inet_addr(TEST_ADDR), IP[i]);
}
}