Bug 202708 - netstat(1) output depends on options order
Summary: netstat(1) output depends on options order
Status: Closed FIXED
Alias: None
Product: Base System
Classification: Unclassified
Component: bin (show other bugs)
Version: 10.1-STABLE
Hardware: amd64 Any
: --- Affects Many People
Assignee: Fernando Apesteguía
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2015-08-28 09:31 UTC by Dmitry Sivachenko
Modified: 2023-02-18 17:09 UTC (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Dmitry Sivachenko freebsd_committer freebsd_triage 2015-08-28 09:31:53 UTC
I get different numbers in netstat(1) output when using different order of options:

# netstat -I em0 -i 1
            input           net0           output
   packets  errs idrops      bytes    packets  errs      bytes colls
    156271     0     0   17092074     154604     0   20191073     0
    157305     0     0   17249790     155758     0   20542298     0
    157213     0     0   17161068     155536     0   20388553     0
    156019     0     0   16867807     154341     0   19934722     0

At the same time:
# netstat  -i 1 -I em0
            input        (Total)           output
   packets  errs idrops      bytes    packets  errs      bytes colls
    508079     0     0   54256010     506328     0   57473424     0
    509058     0     0   53768771     507231     0   56816927     0
    508992     0     0   54059333     507435     0   57132934     0

I suppose that in second form it silently ignores -I em0 and shows statistics including loopback.
Comment 1 Hiren Panchasara freebsd_committer freebsd_triage 2015-08-28 23:59:16 UTC
I think it works as expected. '-i' means 'all interfaces' and not 'interval'. You can get data each second for em0 by just 'netstat -I em0 1'

When you say 'netstat -i 1....' it'd go and display it for all combined each second.

(This is as per my understanding and read of man 1 netstat)
Comment 2 Dmitry Sivachenko freebsd_committer freebsd_triage 2015-08-29 08:15:16 UTC
Yes, I understands that, the point was that when options are mutually exclusive, an error should be produces instead, and not silently change behaviour.
Comment 3 Fernando Apesteguía freebsd_committer freebsd_triage 2023-02-17 16:45:09 UTC
(In reply to Dmitry Sivachenko from comment #2)

https://reviews.freebsd.org/D38654

I think this is more a documentation issue. In other commands as rm(1) we can specify too "incompatible" options like -f and -i, but the manual page clearly specifies that the one that appears last in the command line overrides the previous incompatible one:

$ touch test_file
fernape@hammer:~/test$ rm -f -i test_file 
remove test_file? y
$ touch test_file
$ rm -i -f test_file 
$
Comment 4 commit-hook freebsd_committer freebsd_triage 2023-02-18 17:09:02 UTC
A commit in branch main references this bug:

URL: https://cgit.FreeBSD.org/src/commit/?id=91706f0d6d972c3ff359565e144828dad2a790af

commit 91706f0d6d972c3ff359565e144828dad2a790af
Author:     Fernando Apesteguía <fernape@FreeBSD.org>
AuthorDate: 2023-02-18 17:00:29 +0000
Commit:     Fernando Apesteguía <fernape@FreeBSD.org>
CommitDate: 2023-02-18 17:01:34 +0000

    netstat.1: Clarify -i and -I priorities

    netstat(1) allows to specify both -i (all interfaces) and -I <ifname>.
    However, when both are specified, -I always overrides -i.
    Add a comment where appropriate the same way we do in rm(1) for -f and -i.

    PR:             202708
    Reported by:    demon@
    Approved by:    manpages (pauamma@)
    Differential Revision: https://reviews.freebsd.org/D38654

 usr.bin/netstat/netstat.1 | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)