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

Reply via email to