sockstat tcp/udp switches
Josh Carroll
josh.carroll at gmail.com
Tue Oct 31 19:01:02 UTC 2006
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();
More information about the freebsd-hackers
mailing list