* [PATCH iproute2 v2 0/3] update ifstat for new stats @ 2016-12-15 13:00 Nogah Frankel 2016-12-15 13:00 ` [PATCH iproute2 v2 1/3] ifstat: Add extended statistics to ifstat Nogah Frankel ` (2 more replies) 0 siblings, 3 replies; 9+ messages in thread From: Nogah Frankel @ 2016-12-15 13:00 UTC (permalink / raw) To: netdev Cc: stephen, roopa, jiri, eladr, yotamg, idosch, ogerlitz, Nogah Frankel Previously stats were gotten by RTM_GETLINK which returns 32 bits based statistics. It supports only one type of stats. Lately, a new method to get stats was added - RTM_GETSTATS. It supports ability to choose stats type. The basic stats were changed from 32 bits based to 64 bits based. This patchset adds ifstat the ability to get extended stats by this method. Its adds two types of extended stats: 64bits - the same as the "normal" stats but get the stats from the cpu in 64 bits based struct. SW - for packets that hit cpu. --- v1->v2: - change from using RTM_GETSTATS always to using it only for extended stats. - Add 64bits extended stats type. Nogah Frankel (3): ifstat: Add extended statistics to ifstat ifstat: Add 64 bits based stats to extended statistics ifstat: Add "sw only" extended statistics to ifstat misc/ifstat.c | 165 ++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 150 insertions(+), 15 deletions(-) -- 2.4.3 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH iproute2 v2 1/3] ifstat: Add extended statistics to ifstat 2016-12-15 13:00 [PATCH iproute2 v2 0/3] update ifstat for new stats Nogah Frankel @ 2016-12-15 13:00 ` Nogah Frankel 2016-12-15 17:33 ` Stephen Hemminger 2016-12-19 4:10 ` Or Gerlitz 2016-12-15 13:00 ` [PATCH iproute2 v2 2/3] ifstat: Add 64 bits based stats to extended statistics Nogah Frankel 2016-12-15 13:00 ` [PATCH iproute2 v2 3/3] ifstat: Add "sw only" extended statistics to ifstat Nogah Frankel 2 siblings, 2 replies; 9+ messages in thread From: Nogah Frankel @ 2016-12-15 13:00 UTC (permalink / raw) To: netdev Cc: stephen, roopa, jiri, eladr, yotamg, idosch, ogerlitz, Nogah Frankel Extended stats are part of the RTM_GETSTATS method. This patch adds them to ifstat. While extended stats can come in many forms, we support only the rtnl_link_stats64 struct for them (which is the 64 bits version of struct rtnl_link_stats). We support stats in the main nesting level, or one lower. The extension can be called by its name or any shorten of it. If there is more than one matched, the first one will be picked. To get the extended stats the flag -x <stats type> is used. Signed-off-by: Nogah Frankel <nogahf@mellanox.com> Reviewed-by: Jiri Pirko <jiri@mellanox.com> --- misc/ifstat.c | 161 ++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 146 insertions(+), 15 deletions(-) diff --git a/misc/ifstat.c b/misc/ifstat.c index 92d67b0..d17ae21 100644 --- a/misc/ifstat.c +++ b/misc/ifstat.c @@ -35,6 +35,7 @@ #include <SNAPSHOT.h> +#include "utils.h" int dump_zeros; int reset_history; int ignore_history; @@ -48,17 +49,21 @@ int pretty; double W; char **patterns; int npatterns; +bool is_extanded; +int filter_type; +int sub_type; char info_source[128]; int source_mismatch; #define MAXS (sizeof(struct rtnl_link_stats)/sizeof(__u32)) +#define NO_SUB_TYPE 0xffff struct ifstat_ent { struct ifstat_ent *next; char *name; int ifindex; - unsigned long long val[MAXS]; + __u64 val[MAXS]; double rate[MAXS]; __u32 ival[MAXS]; }; @@ -106,6 +111,48 @@ static int match(const char *id) return 0; } +static int get_nlmsg_extanded(const struct sockaddr_nl *who, + struct nlmsghdr *m, void *arg) +{ + struct if_stats_msg *ifsm = NLMSG_DATA(m); + struct rtattr *tb[IFLA_STATS_MAX+1]; + int len = m->nlmsg_len; + struct ifstat_ent *n; + + if (m->nlmsg_type != RTM_NEWSTATS) + return 0; + + len -= NLMSG_LENGTH(sizeof(*ifsm)); + if (len < 0) + return -1; + + parse_rtattr(tb, IFLA_STATS_MAX, IFLA_STATS_RTA(ifsm), len); + if (tb[filter_type] == NULL) + return 0; + + n = malloc(sizeof(*n)); + if (!n) + abort(); + + n->ifindex = ifsm->ifindex; + n->name = strdup(ll_index_to_name(ifsm->ifindex)); + + if (sub_type == NO_SUB_TYPE) { + memcpy(&n->val, RTA_DATA(tb[filter_type]), sizeof(n->val)); + } else { + struct rtattr *attr; + + attr = parse_rtattr_one_nested(sub_type, tb[filter_type]); + if (attr == NULL) + return 0; + memcpy(&n->val, RTA_DATA(attr), sizeof(n->val)); + } + memset(&n->rate, 0, sizeof(n->rate)); + n->next = kern_db; + kern_db = n; + return 0; +} + static int get_nlmsg(const struct sockaddr_nl *who, struct nlmsghdr *m, void *arg) { @@ -147,18 +194,34 @@ static void load_info(void) { struct ifstat_ent *db, *n; struct rtnl_handle rth; + __u32 filter_mask; if (rtnl_open(&rth, 0) < 0) exit(1); - if (rtnl_wilddump_request(&rth, AF_INET, RTM_GETLINK) < 0) { - perror("Cannot send dump request"); - exit(1); - } + if (is_extanded) { + ll_init_map(&rth); + filter_mask = IFLA_STATS_FILTER_BIT(filter_type); + if (rtnl_wilddump_stats_req_filter(&rth, AF_UNSPEC, RTM_GETSTATS, + filter_mask) < 0) { + perror("Cannot send dump request"); + exit(1); + } - if (rtnl_dump_filter(&rth, get_nlmsg, NULL) < 0) { - fprintf(stderr, "Dump terminated\n"); - exit(1); + if (rtnl_dump_filter(&rth, get_nlmsg_extanded, NULL) < 0) { + fprintf(stderr, "Dump terminated\n"); + exit(1); + } + } else { + if (rtnl_wilddump_request(&rth, AF_INET, RTM_GETLINK) < 0) { + perror("Cannot send dump request"); + exit(1); + } + + if (rtnl_dump_filter(&rth, get_nlmsg, NULL) < 0) { + fprintf(stderr, "Dump terminated\n"); + exit(1); + } } rtnl_close(&rth); @@ -553,10 +616,17 @@ static void update_db(int interval) } for (i = 0; i < MAXS; i++) { double sample; - unsigned long incr = h1->ival[i] - n->ival[i]; + __u64 incr; + + if (is_extanded) { + incr = h1->val[i] - n->val[i]; + n->val[i] = h1->val[i]; + } else { + incr = (__u32) (h1->ival[i] - n->ival[i]); + n->val[i] += incr; + n->ival[i] = h1->ival[i]; + } - n->val[i] += incr; - n->ival[i] = h1->ival[i]; sample = (double)(incr*1000)/interval; if (interval >= scan_interval) { n->rate[i] += W*(sample-n->rate[i]); @@ -656,6 +726,48 @@ static int verify_forging(int fd) return -1; } +static void xstat_usage(void) +{ + fprintf(stderr, +"Usage: ifstat supported xstats:\n"); +} + +struct extended_stats_options_t { + char *name; + int id; + int sub_type; +}; + +/* Note: if one xstat name in subset of another, it should be before it in this + * list. + * Name length must be under 64 chars. + */ +static const struct extended_stats_options_t extended_stats_options[] = { +}; + +static bool get_filter_type(char *name) +{ + int name_len; + int i; + + name_len = strlen(name); + for (i = 0; i < ARRAY_SIZE(extended_stats_options); i++) { + const struct extended_stats_options_t *xstat; + + xstat = &extended_stats_options[i]; + if (strncmp(name, xstat->name, name_len) == 0) { + filter_type = xstat->id; + sub_type = xstat->sub_type; + strcpy(name, xstat->name); + return true; + } + } + + printf("invalid ifstat extension %s\n", name); + xstat_usage(); + return false; +} + static void usage(void) __attribute__((noreturn)); static void usage(void) @@ -673,7 +785,8 @@ static void usage(void) " -s, --noupdate don't update history\n" " -t, --interval=SECS report average over the last SECS\n" " -V, --version output version information\n" -" -z, --zeros show entries with zero activity\n"); +" -z, --zeros show entries with zero activity\n" +" -x, --extended=TYPE show extended stats of TYPE\n"); exit(-1); } @@ -691,18 +804,22 @@ static const struct option longopts[] = { { "interval", 1, 0, 't' }, { "version", 0, 0, 'V' }, { "zeros", 0, 0, 'z' }, + { "extended", 1, 0, 'x'}, { 0 } }; + int main(int argc, char *argv[]) { char hist_name[128]; struct sockaddr_un sun; FILE *hist_fp = NULL; + char stats_type[64]; int ch; int fd; - while ((ch = getopt_long(argc, argv, "hjpvVzrnasd:t:e", + is_extanded = false; + while ((ch = getopt_long(argc, argv, "hjpvVzrnasd:t:ex:", longopts, NULL)) != EOF) { switch (ch) { case 'z': @@ -743,6 +860,11 @@ int main(int argc, char *argv[]) exit(-1); } break; + case 'x': + is_extanded = true; + memset(stats_type, 0, 64); + strncpy(stats_type, optarg, 63); + break; case 'v': case 'V': printf("ifstat utility, iproute2-ss%s\n", SNAPSHOT); @@ -757,6 +879,10 @@ int main(int argc, char *argv[]) argc -= optind; argv += optind; + if (is_extanded) + if (!get_filter_type(stats_type)) + exit(-1); + sun.sun_family = AF_UNIX; sun.sun_path[0] = 0; sprintf(sun.sun_path+1, "ifstat%d", getuid()); @@ -795,8 +921,13 @@ int main(int argc, char *argv[]) snprintf(hist_name, sizeof(hist_name), "%s", getenv("IFSTAT_HISTORY")); else - snprintf(hist_name, sizeof(hist_name), - "%s/.ifstat.u%d", P_tmpdir, getuid()); + if (!is_extanded) + snprintf(hist_name, sizeof(hist_name), + "%s/.ifstat.u%d", P_tmpdir, getuid()); + else + snprintf(hist_name, sizeof(hist_name), + "%s/.%s_ifstat.u%d", P_tmpdir, stats_type, + getuid()); if (reset_history) unlink(hist_name); -- 2.4.3 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH iproute2 v2 1/3] ifstat: Add extended statistics to ifstat 2016-12-15 13:00 ` [PATCH iproute2 v2 1/3] ifstat: Add extended statistics to ifstat Nogah Frankel @ 2016-12-15 17:33 ` Stephen Hemminger 2016-12-16 12:11 ` Nogah Frankel 2016-12-19 4:10 ` Or Gerlitz 1 sibling, 1 reply; 9+ messages in thread From: Stephen Hemminger @ 2016-12-15 17:33 UTC (permalink / raw) To: Nogah Frankel; +Cc: netdev, roopa, jiri, eladr, yotamg, idosch, ogerlitz On Thu, 15 Dec 2016 15:00:43 +0200 Nogah Frankel <nogahf@mellanox.com> wrote: > Extended stats are part of the RTM_GETSTATS method. This patch adds them > to ifstat. > While extended stats can come in many forms, we support only the > rtnl_link_stats64 struct for them (which is the 64 bits version of struct > rtnl_link_stats). > We support stats in the main nesting level, or one lower. > The extension can be called by its name or any shorten of it. If there is > more than one matched, the first one will be picked. > > To get the extended stats the flag -x <stats type> is used. > > Signed-off-by: Nogah Frankel <nogahf@mellanox.com> > Reviewed-by: Jiri Pirko <jiri@mellanox.com> > --- > misc/ifstat.c | 161 ++++++++++++++++++++++++++++++++++++++++++++++++++++------ > 1 file changed, 146 insertions(+), 15 deletions(-) > > diff --git a/misc/ifstat.c b/misc/ifstat.c > index 92d67b0..d17ae21 100644 > --- a/misc/ifstat.c > +++ b/misc/ifstat.c > @@ -35,6 +35,7 @@ > > #include <SNAPSHOT.h> > > +#include "utils.h" > int dump_zeros; > int reset_history; > int ignore_history; Minor nit, please cleanup include order here (original code was wrong). Standard practice is: #include system headers (like stdio.h etc) #include "xxx.h" local headers. Should be: #include <getopt.h> #include <linux/if.h> #include <linux/if_link.h> #include "json_writer.h" #include "libnetlink.h" #include "utils.h" #include "SNAPSHOT.h" ^ permalink raw reply [flat|nested] 9+ messages in thread
* RE: [PATCH iproute2 v2 1/3] ifstat: Add extended statistics to ifstat 2016-12-15 17:33 ` Stephen Hemminger @ 2016-12-16 12:11 ` Nogah Frankel 2016-12-16 15:21 ` Rami Rosen 0 siblings, 1 reply; 9+ messages in thread From: Nogah Frankel @ 2016-12-16 12:11 UTC (permalink / raw) To: Stephen Hemminger Cc: netdev, roopa, Jiri Pirko, Elad Raz, Yotam Gigi, Ido Schimmel, Or Gerlitz > -----Original Message----- > From: Stephen Hemminger [mailto:stephen@networkplumber.org] > Sent: Thursday, December 15, 2016 7:33 PM > To: Nogah Frankel <nogahf@mellanox.com> > Cc: netdev@vger.kernel.org; roopa@cumulusnetworks.com; Jiri Pirko > <jiri@mellanox.com>; Elad Raz <eladr@mellanox.com>; Yotam Gigi > <yotamg@mellanox.com>; Ido Schimmel <idosch@mellanox.com>; Or Gerlitz > <ogerlitz@mellanox.com> > Subject: Re: [PATCH iproute2 v2 1/3] ifstat: Add extended statistics to ifstat > > On Thu, 15 Dec 2016 15:00:43 +0200 > Nogah Frankel <nogahf@mellanox.com> wrote: > > > Extended stats are part of the RTM_GETSTATS method. This patch adds them > > to ifstat. > > While extended stats can come in many forms, we support only the > > rtnl_link_stats64 struct for them (which is the 64 bits version of struct > > rtnl_link_stats). > > We support stats in the main nesting level, or one lower. > > The extension can be called by its name or any shorten of it. If there is > > more than one matched, the first one will be picked. > > > > To get the extended stats the flag -x <stats type> is used. > > > > Signed-off-by: Nogah Frankel <nogahf@mellanox.com> > > Reviewed-by: Jiri Pirko <jiri@mellanox.com> > > --- > > misc/ifstat.c | 161 > ++++++++++++++++++++++++++++++++++++++++++++++++++++------ > > 1 file changed, 146 insertions(+), 15 deletions(-) > > > > diff --git a/misc/ifstat.c b/misc/ifstat.c > > index 92d67b0..d17ae21 100644 > > --- a/misc/ifstat.c > > +++ b/misc/ifstat.c > > @@ -35,6 +35,7 @@ > > > > #include <SNAPSHOT.h> > > > > +#include "utils.h" > > int dump_zeros; > > int reset_history; > > int ignore_history; > > Minor nit, please cleanup include order here (original code was wrong). > > Standard practice is: > #include system headers (like stdio.h etc) > #include "xxx.h" local headers. > > Should be: > #include <getopt.h> > > #include <linux/if.h> > #include <linux/if_link.h> > > #include "json_writer.h" > #include "libnetlink.h" > #include "utils.h" > #include "SNAPSHOT.h" Thanks, I'll fix it. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH iproute2 v2 1/3] ifstat: Add extended statistics to ifstat 2016-12-16 12:11 ` Nogah Frankel @ 2016-12-16 15:21 ` Rami Rosen 2016-12-18 14:22 ` Nogah Frankel 0 siblings, 1 reply; 9+ messages in thread From: Rami Rosen @ 2016-12-16 15:21 UTC (permalink / raw) To: Nogah Frankel Cc: Stephen Hemminger, netdev, roopa, Jiri Pirko, Elad Raz, Yotam Gigi, Ido Schimmel, Or Gerlitz Hi, >Thanks, I'll fix it. Another minor nit, on this occasion: bool is_extanded should be: bool is_extended Regards, Rami Rosen ^ permalink raw reply [flat|nested] 9+ messages in thread
* RE: [PATCH iproute2 v2 1/3] ifstat: Add extended statistics to ifstat 2016-12-16 15:21 ` Rami Rosen @ 2016-12-18 14:22 ` Nogah Frankel 0 siblings, 0 replies; 9+ messages in thread From: Nogah Frankel @ 2016-12-18 14:22 UTC (permalink / raw) To: Rami Rosen Cc: Stephen Hemminger, netdev, roopa, Jiri Pirko, Elad Raz, Yotam Gigi, Ido Schimmel, Or Gerlitz > -----Original Message----- > From: Rami Rosen [mailto:roszenrami@gmail.com] > Sent: Friday, December 16, 2016 5:21 PM > To: Nogah Frankel <nogahf@mellanox.com> > Cc: Stephen Hemminger <stephen@networkplumber.org>; netdev@vger.kernel.org; > roopa@cumulusnetworks.com; Jiri Pirko <jiri@mellanox.com>; Elad Raz > <eladr@mellanox.com>; Yotam Gigi <yotamg@mellanox.com>; Ido Schimmel > <idosch@mellanox.com>; Or Gerlitz <ogerlitz@mellanox.com> > Subject: Re: [PATCH iproute2 v2 1/3] ifstat: Add extended statistics to ifstat > > Hi, > > >Thanks, I'll fix it. > Another minor nit, on this occasion: > > bool is_extanded should be: bool is_extended > > Regards, > Rami Rosen Thank you, I will fix it. Nogah ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH iproute2 v2 1/3] ifstat: Add extended statistics to ifstat 2016-12-15 13:00 ` [PATCH iproute2 v2 1/3] ifstat: Add extended statistics to ifstat Nogah Frankel 2016-12-15 17:33 ` Stephen Hemminger @ 2016-12-19 4:10 ` Or Gerlitz 1 sibling, 0 replies; 9+ messages in thread From: Or Gerlitz @ 2016-12-19 4:10 UTC (permalink / raw) To: Nogah Frankel Cc: Linux Netdev List, Stephen Hemminger, Roopa Prabhu, Jiri Pirko, Elad Raz, Yotam Gigi, Ido Schimmel, Or Gerlitz On Thu, Dec 15, 2016 at 3:00 PM, Nogah Frankel <nogahf@mellanox.com> wrote: > +/* Note: if one xstat name in subset of another, it should be before it in this > + * list. > + * Name length must be under 64 chars. > + */ nit "in subset" --> "is subset" ? ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH iproute2 v2 2/3] ifstat: Add 64 bits based stats to extended statistics 2016-12-15 13:00 [PATCH iproute2 v2 0/3] update ifstat for new stats Nogah Frankel 2016-12-15 13:00 ` [PATCH iproute2 v2 1/3] ifstat: Add extended statistics to ifstat Nogah Frankel @ 2016-12-15 13:00 ` Nogah Frankel 2016-12-15 13:00 ` [PATCH iproute2 v2 3/3] ifstat: Add "sw only" extended statistics to ifstat Nogah Frankel 2 siblings, 0 replies; 9+ messages in thread From: Nogah Frankel @ 2016-12-15 13:00 UTC (permalink / raw) To: netdev Cc: stephen, roopa, jiri, eladr, yotamg, idosch, ogerlitz, Nogah Frankel The default stats for ifstat are 32 bits based. The kernel supports 64 bits based stats. (They are returned in struct rtnl_link_stats64 which is an exact copy of struct rtnl_link_stats, in which the "normal" stats are returned, but with fields of u64 instead of u32). This patch adds them as an extended stats. It is read with filter type IFLA_STATS_LINK_64 and no sub type. It is under the name 64bits (or any shorten of it as "64") For example: ifstat -x 64bit Signed-off-by: Nogah Frankel <nogahf@mellanox.com> Reviewed-by: Jiri Pirko <jiri@mellanox.com> --- misc/ifstat.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/misc/ifstat.c b/misc/ifstat.c index d17ae21..ac99d04 100644 --- a/misc/ifstat.c +++ b/misc/ifstat.c @@ -729,7 +729,8 @@ static int verify_forging(int fd) static void xstat_usage(void) { fprintf(stderr, -"Usage: ifstat supported xstats:\n"); +"Usage: ifstat supported xstats:\n" +" 64bits default stats, with 64 bits support\n"); } struct extended_stats_options_t { @@ -743,6 +744,7 @@ struct extended_stats_options_t { * Name length must be under 64 chars. */ static const struct extended_stats_options_t extended_stats_options[] = { + {"64bits", IFLA_STATS_LINK_64, NO_SUB_TYPE}, }; static bool get_filter_type(char *name) -- 2.4.3 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH iproute2 v2 3/3] ifstat: Add "sw only" extended statistics to ifstat 2016-12-15 13:00 [PATCH iproute2 v2 0/3] update ifstat for new stats Nogah Frankel 2016-12-15 13:00 ` [PATCH iproute2 v2 1/3] ifstat: Add extended statistics to ifstat Nogah Frankel 2016-12-15 13:00 ` [PATCH iproute2 v2 2/3] ifstat: Add 64 bits based stats to extended statistics Nogah Frankel @ 2016-12-15 13:00 ` Nogah Frankel 2 siblings, 0 replies; 9+ messages in thread From: Nogah Frankel @ 2016-12-15 13:00 UTC (permalink / raw) To: netdev Cc: stephen, roopa, jiri, eladr, yotamg, idosch, ogerlitz, Nogah Frankel Add support for extended statistics of SW only type, for counting only the packets that went via the cpu. (useful for systems with forward offloading). It reads it from filter type IFLA_STATS_LINK_OFFLOAD_XSTATS and sub type IFLA_OFFLOAD_XSTATS_CPU_HIT. It is under the name 'software' (or any shorten of it as 'soft' or simply 's') For example: ifstat -x s Signed-off-by: Nogah Frankel <nogahf@mellanox.com> Reviewed-by: Jiri Pirko <jiri@mellanox.com> --- misc/ifstat.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/misc/ifstat.c b/misc/ifstat.c index ac99d04..62f1f2b 100644 --- a/misc/ifstat.c +++ b/misc/ifstat.c @@ -730,7 +730,8 @@ static void xstat_usage(void) { fprintf(stderr, "Usage: ifstat supported xstats:\n" -" 64bits default stats, with 64 bits support\n"); +" 64bits default stats, with 64 bits support\n" +" software SW stats. Counts only packets that went via the CPU\n"); } struct extended_stats_options_t { @@ -745,6 +746,7 @@ struct extended_stats_options_t { */ static const struct extended_stats_options_t extended_stats_options[] = { {"64bits", IFLA_STATS_LINK_64, NO_SUB_TYPE}, + {"software", IFLA_STATS_LINK_OFFLOAD_XSTATS, IFLA_OFFLOAD_XSTATS_CPU_HIT}, }; static bool get_filter_type(char *name) -- 2.4.3 ^ permalink raw reply related [flat|nested] 9+ messages in thread
end of thread, other threads:[~2016-12-19 4:10 UTC | newest] Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2016-12-15 13:00 [PATCH iproute2 v2 0/3] update ifstat for new stats Nogah Frankel 2016-12-15 13:00 ` [PATCH iproute2 v2 1/3] ifstat: Add extended statistics to ifstat Nogah Frankel 2016-12-15 17:33 ` Stephen Hemminger 2016-12-16 12:11 ` Nogah Frankel 2016-12-16 15:21 ` Rami Rosen 2016-12-18 14:22 ` Nogah Frankel 2016-12-19 4:10 ` Or Gerlitz 2016-12-15 13:00 ` [PATCH iproute2 v2 2/3] ifstat: Add 64 bits based stats to extended statistics Nogah Frankel 2016-12-15 13:00 ` [PATCH iproute2 v2 3/3] ifstat: Add "sw only" extended statistics to ifstat Nogah Frankel
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.