From owner-svn-src-projects@FreeBSD.ORG Wed Aug 25 15:21:27 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 42AC01065696; Wed, 25 Aug 2010 15:21:27 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 31BCF8FC3F; Wed, 25 Aug 2010 15:21:27 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o7PFLR6q015313; Wed, 25 Aug 2010 15:21:27 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o7PFLRRB015311; Wed, 25 Aug 2010 15:21:27 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201008251521.o7PFLRRB015311@svn.freebsd.org> From: Attilio Rao Date: Wed, 25 Aug 2010 15:21:27 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r211815 - projects/sv/sys/net X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 25 Aug 2010 15:21:27 -0000 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"); /*