From: Stephen Hemminger <shemminger@vyatta.com>
To: Eric Dumazet <eric.dumazet@gmail.com>
Cc: Ben Hutchings <bhutchings@solarflare.com>,
David Miller <davem@davemloft.net>,
netdev@vger.kernel.org
Subject: Re: [PATCH] iproute2: add 64bit support to ifstat
Date: Mon, 23 Aug 2010 10:33:33 -0700 [thread overview]
Message-ID: <20100823103333.67c5f795@nehalam> (raw)
In-Reply-To: <1282582464.2486.479.camel@edumazet-laptop>
On Mon, 23 Aug 2010 18:54:24 +0200
Eric Dumazet <eric.dumazet@gmail.com> wrote:
> Le lundi 23 août 2010 à 09:17 -0700, Stephen Hemminger a écrit :
> > On Mon, 23 Aug 2010 16:43:23 +0100
> > Ben Hutchings <bhutchings@solarflare.com> wrote:
> >
> > > On Mon, 2010-08-23 at 08:32 -0700, Stephen Hemminger wrote:
> > > > This commit broke iproute2 build:
> > > >
> > > > commit be1f3c2c027cc5ad735df6a45a542ed1db7ec48b
> > > > Author: Ben Hutchings <bhutchings@solarflare.com>
> > > > Date: Tue Jun 8 07:19:54 2010 +0000
> > > >
> > > > net: Enable 64-bit net device statistics on 32-bit architectures
> > > >
> > > > Use struct rtnl_link_stats64 as the statistics structure.
> > > >
> > > > Iproute2 uses a the kernel exported headers, and the structure
> > > > net_device_stats which is part of the netlink IFLA_STATS message
> > > > was no longer exposed.
> > > [...]
> > >
> > > This is not true; the kernel uses struct rtnl_link_stats for IFLA_STATS.
> > > AFAICS the only reference to struct net_device_stats in iproute2 is:
> > >
> > > misc/ifstat.c:51:#define MAXS (sizeof(struct net_device_stats)/sizeof(unsigned long))
> > >
> > > This should be changed to refer to the structure that is actually used.
> >
> > Ok.
>
> Stephen,
>
> Here is a patch to ifstat on top of your last one.
>
> I guess nobody tried it on a 64bit platform...
>
> Thanks
>
> iproute2: add 64bit support to ifstat
>
> ifstat assumes IFLA_STATS fields are "unsigned long"
>
> ifstat can use 64bit stats if available (IFLA_STATS64)
>
> Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
> ---
>
> diff --git a/misc/ifstat.c b/misc/ifstat.c
> index 5cf2e01..c649ee2 100644
> --- a/misc/ifstat.c
> +++ b/misc/ifstat.c
> @@ -49,7 +49,7 @@ int npatterns;
> char info_source[128];
> int source_mismatch;
>
> -#define MAXS (sizeof(struct rtnl_link_stats)/sizeof(unsigned long))
> +#define MAXS (sizeof(struct rtnl_link_stats)/sizeof(__u32))
>
> struct ifstat_ent
> {
> @@ -58,7 +58,7 @@ struct ifstat_ent
> int ifindex;
> unsigned long long val[MAXS];
> double rate[MAXS];
> - unsigned long ival[MAXS];
> + __u32 ival[MAXS];
> };
>
> struct ifstat_ent *kern_db;
> @@ -108,8 +108,12 @@ static int get_nlmsg(const struct sockaddr_nl *who,
> n->name = strdup(RTA_DATA(tb[IFLA_IFNAME]));
> memcpy(&n->ival, RTA_DATA(tb[IFLA_STATS]), sizeof(n->ival));
> memset(&n->rate, 0, sizeof(n->rate));
> - for (i=0; i<MAXS; i++)
> - n->val[i] = n->ival[i];
> + if (tb[IFLA_STATS64])
> + memcpy(&n->val, RTA_DATA(tb[IFLA_STATS64]), sizeof(n->val));
> + else
> + for (i = 0; i < MAXS; i++)
> + n->val[i] = n->ival[i];
> +
> n->next = kern_db;
> kern_db = n;
> return 0;
>
>
I think this breaks the wraparound detection code in this command.
--
next prev parent reply other threads:[~2010-08-23 17:33 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-23 15:32 [PATCH] netdev: re-expose net_device_stats to user headers Stephen Hemminger
2010-08-23 15:43 ` Ben Hutchings
2010-08-23 16:17 ` Stephen Hemminger
2010-08-23 16:54 ` [PATCH] iproute2: add 64bit support to ifstat Eric Dumazet
2010-08-23 17:33 ` Stephen Hemminger [this message]
2010-08-23 19:44 ` Eric Dumazet
2010-08-23 20:06 ` Stephen Hemminger
2010-08-23 20:28 ` Eric Dumazet
2010-08-23 20:39 ` Stephen Hemminger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100823103333.67c5f795@nehalam \
--to=shemminger@vyatta.com \
--cc=bhutchings@solarflare.com \
--cc=davem@davemloft.net \
--cc=eric.dumazet@gmail.com \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.