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>
66 lines
2 KiB
Diff
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]);
|
|
}
|
|
}
|
|
|