netstat address family and interface, well-known protocols

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

netstat address family and interface, well-known protocols

marfabastewart
Synopsis: netstat address family and interface, well-known protocols
Category: user
Environment:
        System      : OpenBSD 6.7
        Details     : OpenBSD 6.7-current (GENERIC.MP) #351: Wed Jul 15 16:57:00 MDT 2020
                         [hidden email]:/usr/src/sys/arch/amd64/compile/GENERIC.MP

        Architecture: OpenBSD.amd64
        Machine     : amd64
Description:
        netstat doesn't limit output to address family when used with -I, and protocol list problem
How-To-Repeat:
        netstat -f inet -s -I lo0
        or
        netstat -s -f inet -I lo0
        netstat -f inet -I lo0

        Any interface can be used instead of lo0.
        Netstat shows ipv6 information also although man netstat says
                If the -f address_family option (with the -s option) is present,
                show per-interface statistics on the given interface for the
                specified address_family.

        (It does, but doesn't limit output to the specified address_family.)

        netstat -p only works for the protocols hard-coded in the protox struct in
        /usr/src/usr.bin/netstat/main.c

Fix:
        I'm not too well-versed in C (as perhaps my questions make clear)
        but happy to try to offer patches if someone would suggest
        the general direction of changes to make (and if the whole problem is not EBKAC).

        I note that netstat -f inet works but adding the -I doesn't seem to work.
        Is it because if iflag is set, we call intpr:
                if (iflag) {
                        intpr(interval, repeatcount);
                        exit(0);
                }
        in lines 295-296 in /usr/src/usr.bin/netstat/main.c?

        For the protocol problem, I see the call to getprotoent but
        no call to getprotobyname in the name2protox function in
        /usr/src/usr.bin/netstat/main.c