Date: Thu, 2 Nov 2006 09:53:43 +0100 (CET) From: Mohacsi Janos <mohacsi@niif.hu> To: josh.carroll@psualum.com Cc: josh.carroll@gmail.com, freebsd-hackers@freebsd.org Subject: Re: sockstat tcp/udp switches Message-ID: <20061102094748.G75543@mignon.ki.iif.hu> In-Reply-To: <8cb6106e0610311058s7144d38bp2b1dafd114e2b433@mail.gmail.com> References: <8cb6106e0610311058s7144d38bp2b1dafd114e2b433@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Hi, I haven't tested yet, but I think in the options structure you should use : + {"ipv6", 0, NULL, '6'}, instead of: + {"ipv6", 0, NULL, 0}, also for portability you should use: no_argument or required_argument as a second field.... Regards, Janos Mohacsi On Tue, 31 Oct 2006, Josh Carroll wrote: > 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 <stdlib.h> > #include <string.h> > #include <unistd.h> > +#include <getopt.h> > > 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(); > _______________________________________________ > freebsd-hackers@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-hackers > To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org" >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20061102094748.G75543>