Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 25 Aug 2010 15:21:27 +0000 (UTC)
From:      Attilio Rao <attilio@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r211815 - projects/sv/sys/net
Message-ID:  <201008251521.o7PFLRRB015311@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: attilio
Date: Wed Aug 25 15:21:26 2010
New Revision: 211815
URL: http://svn.freebsd.org/changeset/base/211815

Log:
  With the current code the the client and the server must be in the same
  subnet.
  Specify a new parameter for passing the gateway and allow client and
  server not being in the same subnet.
  
  Obtained from:	Sandvine Incorporated

Modified:
  projects/sv/sys/net/netdump_client.c

Modified: projects/sv/sys/net/netdump_client.c
==============================================================================
--- projects/sv/sys/net/netdump_client.c	Wed Aug 25 13:37:55 2010	(r211814)
+++ projects/sv/sys/net/netdump_client.c	Wed Aug 25 15:21:26 2010	(r211815)
@@ -135,11 +135,12 @@ static uint16_t nd_server_port = NETDUMP
 static unsigned char buf[MAXDUMPPGS*PAGE_SIZE]; /* Must be at least as big as
 						 * the chunks dumpsys() gives
 						 * us */
-static struct ether_addr nd_server_mac;
+static struct ether_addr nd_gw_mac;
 
 static int nd_enable = 0;  /* if we should perform a network dump */
 static struct in_addr nd_server = {INADDR_ANY}; /* server address */
 static struct in_addr nd_client = {INADDR_ANY}; /* client (our) address */
+static struct in_addr nd_gw = {INADDR_ANY}; /* gw, if set */
 struct ifnet *nd_nic = NULL;
 static int nd_polls=10000; /* Times to poll the NIC (0.5ms each poll) before
 			    * assuming packetloss occurred: 5s by default */
@@ -312,6 +313,8 @@ SYSCTL_PROC(_net_dump, OID_AUTO, server,
 	0, sysctl_ip, "A", "dump server");
 SYSCTL_PROC(_net_dump, OID_AUTO, client, CTLTYPE_STRING|CTLFLAG_RW, &nd_client,
 	0, sysctl_ip, "A", "dump client");
+SYSCTL_PROC(_net_dump, OID_AUTO, gateway, CTLTYPE_STRING|CTLFLAG_RW, &nd_gw,
+	0, sysctl_ip, "A", "dump default gateway");
 SYSCTL_PROC(_net_dump, OID_AUTO, nic, CTLTYPE_STRING|CTLFLAG_RW, &nd_nic,
 	IFNAMSIZ, sysctl_nic, "A", "NIC to dump on");
 SYSCTL_INT(_net_dump, OID_AUTO, polls, CTLTYPE_INT|CTLFLAG_RW, &nd_polls, 0,
@@ -465,7 +468,7 @@ netdump_udp_output(struct mbuf *m)
 		return ENOBUFS;
 	}
 
-	return netdump_ether_output(m, nd_nic, nd_server_mac, ETHERTYPE_IP);
+	return netdump_ether_output(m, nd_nic, nd_gw_mac, ETHERTYPE_IP);
 }
 
 /*
@@ -506,7 +509,7 @@ netdump_send_arp()
 	bcopy(IF_LLADDR(nd_nic), ar_sha(ah), ETHER_ADDR_LEN);
 	((struct in_addr *)ar_spa(ah))->s_addr = nd_client.s_addr;
 	bzero(ar_tha(ah), ETHER_ADDR_LEN);
-	((struct in_addr *)ar_tpa(ah))->s_addr = nd_server.s_addr;
+	((struct in_addr *)ar_tpa(ah))->s_addr = nd_gw.s_addr;
 
 	return netdump_ether_output(m, nd_nic, bcast, ETHERTYPE_ARP);
 }
@@ -948,18 +951,18 @@ nd_handle_arp(struct mbuf **mb)
 	}
 
 	if (op == ARPOP_REPLY) {
-		if (isaddr.s_addr != nd_server.s_addr) {
+		if (isaddr.s_addr != nd_gw.s_addr) {
 			char buf[INET_ADDRSTRLEN];
 			inet_ntoa_r(isaddr, buf);
 			NETDDEBUG("nd_handle_arp: ignoring ARP reply from "
 			    "%s (not netdump server)\n", buf);
 			return;
 		}
-		bcopy(ar_sha(ah), nd_server_mac.octet,
+		bcopy(ar_sha(ah), nd_gw_mac.octet,
 				min(ah->ar_hln, ETHER_ADDR_LEN));
 		have_server_mac = 1;
 		NETDDEBUG("\nnd_handle_arp: Got server MAC address %6D\n",
-		    nd_server_mac.octet, ":");
+		    nd_gw_mac.octet, ":");
 		return;
 	}
 
@@ -1242,6 +1245,9 @@ netdump_trigger(void *arg, int howto)
 		goto abort;
 	}
 
+	if (nd_gw.s_addr == INADDR_ANY) {
+		nd_gw.s_addr = nd_server.s_addr;
+	}
 	printf("\n-----------------------------------\n");
 	printf("netdump in progress. searching for server.. ");
 	if (netdump_arp_server()) {
@@ -1253,7 +1259,7 @@ netdump_trigger(void *arg, int howto)
 		goto abort;
 	}
 	printf("dumping to %s (%6D)\n", inet_ntoa(nd_server),
-			nd_server_mac.octet, ":");
+			nd_gw_mac.octet, ":");
 	printf("-----------------------------------\n");
 
 	/*



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201008251521.o7PFLRRB015311>