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 <kurt.van.di...@eia.be>
> ---
> 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
> Socketcan-core@lists.berlios.de
> 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   |

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
Socketcan-core mailing list
Socketcan-core@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/socketcan-core

Reply via email to