From owner-freebsd-hackers@FreeBSD.ORG Tue Oct 31 19:01:02 2006 Return-Path: X-Original-To: freebsd-hackers@freebsd.org Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 95B7D16A53D for ; Tue, 31 Oct 2006 19:01:02 +0000 (UTC) (envelope-from josh.carroll@gmail.com) Received: from ug-out-1314.google.com (ug-out-1314.google.com [66.249.92.170]) by mx1.FreeBSD.org (Postfix) with ESMTP id 0837543DEC for ; Tue, 31 Oct 2006 18:58:23 +0000 (GMT) (envelope-from josh.carroll@gmail.com) Received: by ug-out-1314.google.com with SMTP id m2so1311114uge for ; Tue, 31 Oct 2006 10:58:23 -0800 (PST) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:reply-to:to:subject:cc:mime-version:content-type:content-transfer-encoding:content-disposition; b=Tr0J9HCj4P2/5oDTDaCHDFGv9xCneGXgHU+tyUXHAOsasHvb9jLPW7eBYZN5xhMsmS/MqLXWLvhiqGp1KuAFkuKPKxkqvXEWm+2/tNeHCeOChJgR54E6GavKZnqpiljETd8W5WyS0b3e6DaNlvCMniZxP4y35x1+e6ggjfKkXTY= Received: by 10.82.109.19 with SMTP id h19mr1245374buc; Tue, 31 Oct 2006 10:58:23 -0800 (PST) Received: by 10.82.163.16 with HTTP; Tue, 31 Oct 2006 10:58:23 -0800 (PST) Message-ID: <8cb6106e0610311058s7144d38bp2b1dafd114e2b433@mail.gmail.com> Date: Tue, 31 Oct 2006 10:58:23 -0800 From: "Josh Carroll" To: freebsd-hackers@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline X-Mailman-Approved-At: Wed, 01 Nov 2006 03:06:44 +0000 Cc: josh.carroll@gmail.com Subject: sockstat tcp/udp switches X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: josh.carroll@psualum.com List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 31 Oct 2006 19:01:02 -0000 All, I have added two options to the sockstat command to list tcp and/or udp sockets. -t ([-]-tcp) : display tcp sockets -d ([-]-udp) : display udp sockets The previous command line options are unchanged, although I did change the use of getopt to getopt_long_only and added long options for the other command line switches. I know the same effect can be accomplished with grep, but figured it'd be nice to have it included in the sockstat command line. Thoughts/comments? Patch is below. patch with: patch -p0 < /path/to/sockstat.patch from the /usr/src/usr.bin/sockstat directory. Please cc: me on replies, as I am not subscribed to the hackers mailing list. Thanks! Josh --- sockstat.c.orig Tue Oct 31 10:51:40 2006 +++ sockstat.c Tue Oct 31 10:51:58 2006 @@ -58,6 +58,7 @@ #include #include #include +#include static int opt_4; /* Show IPv4 sockets */ static int opt_6; /* Show IPv6 sockets */ @@ -65,6 +66,8 @@ static int opt_l; /* Show listening sockets */ static int opt_u; /* Show Unix domain sockets */ static int opt_v; /* Verbose mode */ +static int opt_tcp; /* show tcp */ +static int opt_udp; /* show udp */ static int *ports; @@ -584,8 +587,20 @@ main(int argc, char *argv[]) { int o; + static struct option options[] = { + {"ipv4", 0, NULL, '4'}, + {"ipv6", 0, NULL, 0}, + {"connected", 0, NULL, 'c'}, + {"listening", 0, NULL, 'l'}, + {"unix", 0, NULL, 'u'}, + {"verbose", 0, NULL, 'v'}, + {"port", 1, NULL, 'p'}, + {"tcp", 0, NULL, 't'}, + {"udp", 0, NULL, 'd'}, + {NULL, 0, NULL, 0} + }; - while ((o = getopt(argc, argv, "46clp:uv")) != -1) + while ((o = getopt_long_only(argc, argv, "46clp:uvtd", options, NULL)) != -1) switch (o) { case '4': opt_4 = 1; @@ -608,6 +623,12 @@ case 'v': ++opt_v; break; + case 't': + opt_tcp = 1; + break; + case 'd': + opt_udp = 1; + break; default: usage(); } @@ -618,20 +639,35 @@ if (argc > 0) usage(); - if (!opt_4 && !opt_6 && !opt_u) - opt_4 = opt_6 = opt_u = 1; + if (!opt_4 && !opt_6) { + opt_4 = opt_6 = 1; + + if(!opt_u) { + if(opt_tcp || opt_udp) + opt_u = 0; + } else { + opt_4 = opt_6 = opt_u = 1; + } + } + if (!opt_c && !opt_l) opt_c = opt_l = 1; + if(!opt_tcp && !opt_udp) + opt_tcp = opt_udp = 1; + if (opt_4 || opt_6) { - gather_inet(IPPROTO_TCP); - gather_inet(IPPROTO_UDP); + if(opt_tcp) + gather_inet(IPPROTO_TCP); + if(opt_udp) + gather_inet(IPPROTO_UDP); gather_inet(IPPROTO_DIVERT); } if (opt_u) { gather_unix(SOCK_STREAM); gather_unix(SOCK_DGRAM); } + getfiles(); display();