On Tue, Mar 29, 2016 at 03:38:58PM +0200, Tobias Klauser wrote:
> On 2016-03-29 at 15:32:43 +0200, Vadim Kochan <vadi...@gmail.com> wrote:
> > On Tue, Mar 29, 2016 at 4:23 PM, Tobias Klauser <tklau...@distanz.ch> wrote:
> > > On 2016-03-23 at 22:00:44 +0100, Vadim Kochan <vadi...@gmail.com> wrote:
> > >> Changed flows list layout to look more a top-like output
> > >> with header and in 1 line. When -s option is specified
> > >> then layout changes to 2 lines view including with src peer
> > >> info and dst under it on next line.
> > >>
> > >> Also shortified flow state names to allocate less space.
> > >>
> > >> Removed presenter_get_port be cause ports are printed for both peers
> > >> separately.
> > >>
> > >> The flow duration time is printed in very short form in one of the
> > >> units:
> > >>     XXd - days
> > >>     XXh - hours
> > >>     XXm - minutes
> > >>     XXs - seconds
> > >>
> > >> the reason is that it is enough to have actually generic understanding
> > >> about flow time in the biggest time unit.
> > >>
> > >> Signed-off-by: Vadim Kochan <vadi...@gmail.com>
> > >> ---
> > >>  flowtop.c | 405 
> > >> ++++++++++++++++++++++++++++++--------------------------------
> > >>  1 file changed, 194 insertions(+), 211 deletions(-)
> > >>
> > >> diff --git a/flowtop.c b/flowtop.c
> > >> index 4c15c06..8201321 100644
> > >> --- a/flowtop.c
> > >> +++ b/flowtop.c
> > >> @@ -62,6 +62,7 @@ struct flow_entry {
> > >>       uint64_t pkts_dst, bytes_dst;
> > >>       uint64_t timestamp_start, timestamp_stop;
> > >>       char country_src[128], country_dst[128];
> > >> +     char country_code_src[4], country_code_dst[4];
> > >>       char city_src[128], city_dst[128];
> > >>       char rev_dns_src[256], rev_dns_dst[256];
> > >>       char procname[256];
> > >> @@ -166,11 +167,6 @@ static const char *copyright = "Please report bugs 
> > >> to <netsniff-ng@googlegroups.
> > >>       "This is free software: you are free to change and redistribute 
> > >> it.\n"
> > >>       "There is NO WARRANTY, to the extent permitted by law.";
> > >>
> > >> -static const char *const l3proto2str[AF_MAX] = {
> > >> -     [AF_INET]                       = "ipv4",
> > >> -     [AF_INET6]                      = "ipv6",
> > >> -};
> > >
> > > Why remove L3 protocol information from the output? I consider this
> > > quite useful. Could we somehow combine this with L4 Proto information in
> > > a generic way?
> > 
> > I thought it will be easy to identify ipvX version by IPvX address format.
> 
> True, didn't think of it that way. I'm fine with omitting it in that case...
> 
> > >
> > >> -
> > >>  static const char *const l4proto2str[IPPROTO_MAX] = {
> > >>       [IPPROTO_TCP]                   = "tcp",
> > >>       [IPPROTO_UDP]                   = "udp",
> > >> @@ -194,40 +190,40 @@ static const char *const l4proto2str[IPPROTO_MAX] 
> > >> = {
> > >>  };
> > >>
> > >>  static const char *const tcp_state2str[TCP_CONNTRACK_MAX] = {
> > >> -     [TCP_CONNTRACK_NONE]            = "NOSTATE",
> > >> -     [TCP_CONNTRACK_SYN_SENT]        = "SYN_SENT",
> > >> -     [TCP_CONNTRACK_SYN_RECV]        = "SYN_RECV",
> > >> -     [TCP_CONNTRACK_ESTABLISHED]     = "ESTABLISHED",
> > >> -     [TCP_CONNTRACK_FIN_WAIT]        = "FIN_WAIT",
> > >> -     [TCP_CONNTRACK_CLOSE_WAIT]      = "CLOSE_WAIT",
> > >> -     [TCP_CONNTRACK_LAST_ACK]        = "LAST_ACK",
> > >> -     [TCP_CONNTRACK_TIME_WAIT]       = "TIME_WAIT",
> > >> -     [TCP_CONNTRACK_CLOSE]           = "CLOSE",
> > >> -     [TCP_CONNTRACK_SYN_SENT2]       = "SYN_SENT2",
> > >> +     [TCP_CONNTRACK_NONE]            = "NO",
> > >> +     [TCP_CONNTRACK_SYN_SENT]        = "SS",
> > >> +     [TCP_CONNTRACK_SYN_RECV]        = "SR",
> > >> +     [TCP_CONNTRACK_ESTABLISHED]     = "EST",
> > >> +     [TCP_CONNTRACK_FIN_WAIT]        = "FWT",
> > >> +     [TCP_CONNTRACK_CLOSE_WAIT]      = "CWT",
> > >> +     [TCP_CONNTRACK_LAST_ACK]        = "LAC",
> > >> +     [TCP_CONNTRACK_TIME_WAIT]       = "TWT",
> > >> +     [TCP_CONNTRACK_CLOSE]           = "CLO",
> > >> +     [TCP_CONNTRACK_SYN_SENT2]       = "SS2",
> > >
> > >
> > > These abbreviations are no longer easy to grasp for the user without
> > > looking at this struct in the source. We should either keep the long
> > > names (if possible) of at least add corresponding documentation about
> > > the abbreviations to the manpage. Same goes for dccp_state2str and
> > > sctp_state2str below.
> > 
> > OK, what do you prefer ? I just tried to minimize the column width to
> > fit into at least 100-sized screen.
> > But OK, I will try to see how much character long names will occupy.
> 
> I'd prefer the long version, but if you can't fit it into the width
> without too many compromises I think the abbreviations are fine as well.
> But they should be documented at least, maybe even in the help screen.
> 
> > >>
> > >> -static void draw_flow_entry(WINDOW *screen, const struct flow_entry *n,
> > >> -                         unsigned int *line)
> > >> +static void draw_flow_entry(WINDOW *scr, const struct flow_entry *n, 
> > >> int line)
> > >>  {
> > >> +     const char *str = NULL;
> > >>       char tmp[128];
> > >> -     const char *pname = NULL;
> > >> -     uint16_t port;
> > >>
> > >> -     mvwprintw(screen, *line, 2, "");
> > >> +     mvwprintw(scr, line, 0, "");
> > >>
> > >> -     /* PID, application name */
> > >> -     if (n->procnum > 0) {
> > >> -             slprintf(tmp, sizeof(tmp), "%s(%d)", n->procname, 
> > >> n->procnum);
> > >> +     /* Application */
> > >> +     attron(COLOR_PAIR(3));
> > >> +     printw("%-*.*s", 10, 10, n->procname);
> > >
> > > There might be several processes with the same name, how would we now
> > > differentiate them?
> > 
> > What about separate column "PID" ?
> 
> Yes, that'd be great.
> 
> Thanks!
> Tobias

Hi,

I prepared new series for flowtop, I changed state names to this:

        static const char *const tcp_state2str[TCP_CONNTRACK_MAX] = {
                [TCP_CONNTRACK_NONE]            = "NONE",
                [TCP_CONNTRACK_SYN_SENT]        = "SYN-SNT",
                [TCP_CONNTRACK_SYN_RECV]        = "SYN-RECV",
                [TCP_CONNTRACK_ESTABLISHED]     = "ESTAB",
                [TCP_CONNTRACK_FIN_WAIT]        = "FIN-WAIT",
                [TCP_CONNTRACK_CLOSE_WAIT]      = "CLO-WAIT",
                [TCP_CONNTRACK_LAST_ACK]        = "LAST-ACK",
                [TCP_CONNTRACK_TIME_WAIT]       = "TIMEWAIT",
                [TCP_CONNTRACK_CLOSE]           = "CLOSE",
                [TCP_CONNTRACK_SYN_SENT2]       = "SYN-SNT2",
        };

        static const char *const dccp_state2str[DCCP_CONNTRACK_MAX] = {
                [DCCP_CONNTRACK_NONE]           = "NONE",
                [DCCP_CONNTRACK_REQUEST]        = "REQUEST",
                [DCCP_CONNTRACK_RESPOND]        = "RESPOND",
                [DCCP_CONNTRACK_PARTOPEN]       = "PARTOPEN",
                [DCCP_CONNTRACK_OPEN]           = "OPEN",
                [DCCP_CONNTRACK_CLOSEREQ]       = "CLOSEREQ",
                [DCCP_CONNTRACK_CLOSING]        = "CLOSING",
                [DCCP_CONNTRACK_TIMEWAIT]       = "TIMEWAIT",
                [DCCP_CONNTRACK_IGNORE]         = "IGNORE",
                [DCCP_CONNTRACK_INVALID]        = "INVALID",
        };

        static const char *const sctp_state2str[SCTP_CONNTRACK_MAX] = {
                [SCTP_CONNTRACK_NONE]           = "NONE",
                [SCTP_CONNTRACK_CLOSED]         = "CLOSED",
                [SCTP_CONNTRACK_COOKIE_WAIT]    = "CK-WAIT",
                [SCTP_CONNTRACK_COOKIE_ECHOED]  = "CK-ECHO",
                [SCTP_CONNTRACK_ESTABLISHED]    = "ESTAB",
                [SCTP_CONNTRACK_SHUTDOWN_SENT]  = "SHUT-SNT",
                [SCTP_CONNTRACK_SHUTDOWN_RECD]  = "SHUT-RCV",
                [SCTP_CONNTRACK_SHUTDOWN_ACK_SENT] = "SHUT-ACK",
        };

I really think that now they are more understandable (even CK-WAIT), and no
need to update man page or add help screen. I allocated 8 maximum chars
for the "STATE" column.

What do you think ?

Regards,
Vadim Kochan

-- 
You received this message because you are subscribed to the Google Groups 
"netsniff-ng" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to netsniff-ng+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to