On 10/12/2011 02:55 PM, Kurt Van Dijck wrote: > Not sure where exactly to put this. > > When using libsocketcan on > git://git.pengutronix.de/git/tools/libsocketcan.git, > I kind of missed a method to fetch the can device statistics. > This patch adds that functionality. > I think this is the proper library to put such function. > > Signed-off-by: Kurt Van Dijck <[email protected]> > --- > diff --git a/include/libsocketcan.h b/include/libsocketcan.h > index 10c012c..6098d6a 100644 > --- a/include/libsocketcan.h > +++ b/include/libsocketcan.h > @@ -45,5 +45,6 @@ int can_get_state(const char *name, int *state); > int can_get_clock(const char *name, struct can_clock *clock); > int can_get_bittiming_const(const char *name, struct can_bittiming_const > *btc); > int can_get_berr_counter(const char *name, struct can_berr_counter *bc); > +int can_get_device_stats(const char *name, struct can_device_stats *cds); > > #endif > diff --git a/src/libsocketcan.c b/src/libsocketcan.c > index 2ac3f2a..34d3875 100644 > --- a/src/libsocketcan.c > +++ b/src/libsocketcan.c > @@ -53,6 +53,7 @@ > #define GET_CLOCK 5 > #define GET_BITTIMING_CONST 6 > #define GET_BERR_COUNTER 7 > +#define GET_XSTATS 8 > > struct get_req { > struct nlmsghdr n; > @@ -386,6 +387,17 @@ static int do_get_nl_link(int fd, __u8 acquire, const > char *name, void *res) > else > continue; > > + if (acquire == GET_XSTATS) { > + if (!linkinfo[IFLA_INFO_XSTATS]) > + fprintf(stderr, "no can statistics found\n"); > + else { > + memcpy(res, > RTA_DATA(linkinfo[IFLA_INFO_XSTATS]), > + sizeof(struct > can_device_stats)); > + ret = 0; > + } > + continue; > + }
is it possible to put GET_XSTATS to the bit switch statement below?
Marc
> +
> if (!linkinfo[IFLA_INFO_DATA]) {
> fprintf(stderr, "no link data found\n");
> return ret;
> @@ -1121,3 +1133,24 @@ int can_get_berr_counter(const char *name, struct
> can_berr_counter *bc)
> {
> return get_link(name, GET_BERR_COUNTER, bc);
> }
> +
> +/**
> + * @ingroup extern
> + * can_get_device_stats - get the can_device_stats.
> + *
> + * @param name name of the can device. This is the netdev name, as ifconfig
> -a shows
> + * in your system. usually it contains prefix "can" and the numer of the can
> + * line. e.g. "can0"
> + * @param bc pointer to the error counter struct..
> + *
> + * This one gets the current can_device_stats.
> + *
> + * Please see struct can_device_stats for more information.
> + *
> + * @return 0 if success
> + * @return -1 if failed
> + */
> +int can_get_device_stats(const char *name, struct can_device_stats *cds)
> +{
> + return get_link(name, GET_XSTATS, cds);
> +}
> _______________________________________________
> Socketcan-core mailing list
> [email protected]
> https://lists.berlios.de/mailman/listinfo/socketcan-core
--
Pengutronix e.K. | Marc Kleine-Budde |
Industrial Linux Solutions | Phone: +49-231-2826-924 |
Vertretung West/Dortmund | Fax: +49-5121-206917-5555 |
Amtsgericht Hildesheim, HRA 2686 | http://www.pengutronix.de |
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Socketcan-core mailing list [email protected] https://lists.berlios.de/mailman/listinfo/socketcan-core
