On Thu, Oct 13, 2011 at 03:23:32PM +0200, Marc Kleine-Budde wrote: > On 10/13/2011 03:11 PM, Kurt Van Dijck wrote: > > On Thu, Oct 13, 2011 at 01:26:51PM +0200, Marc Kleine-Budde wrote: > >> On 10/13/2011 01:02 PM, Kurt Van Dijck wrote: > >>> On Thu, Oct 13, 2011 at 11:24:59AM +0200, Marc Kleine-Budde wrote: > >>>> 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"); > >> > >> what about "return -1;" here? > >> > > Not "return -1;" here implies that the "return ret;" at the end is > > executed, and > > ret == -1. > > Here's the whole code... > > > 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; > > } > > but it says continue.....thus it does _not_ return -1. It will continue to loop for (nl_msg = (struct nlmsghdr *)nlbuf; NLMSG_OK(nl_msg, u_msglen); nl_msg = NLMSG_NEXT(nl_msg, u_msglen)) { until that exits and return ret; which was: int ret = -1; in the beginning.
At least, that's what I think. > > > I depends on how the netlink attributes come in the stream. I'm not > > specialised > > in that. Any hints? > > me neither > > Marc > Kurt _______________________________________________ Socketcan-core mailing list Socketcan-core@lists.berlios.de https://lists.berlios.de/mailman/listinfo/socketcan-core