@@ -237,7 +237,7 @@ int main(int argc, char **argv)
237237 int opt ;
238238 char * ptr , * nptr ;
239239 struct sockaddr_can addr ;
240- struct can_frame frame ;
240+ struct canfd_frame frame ;
241241 int nbytes , i ;
242242 struct ifreq ifr ;
243243 sigset_t sigmask , savesigmask ;
@@ -351,6 +351,9 @@ int main(int argc, char **argv)
351351#ifdef DEBUG
352352 printf ("using interface name '%s'.\n" , ifr .ifr_name );
353353#endif
354+ /* try to switch the socket into CAN FD mode */
355+ const int canfd_on = 1 ;
356+ setsockopt (s [i ], SOL_CAN_RAW , CAN_RAW_FD_FRAMES , & canfd_on , sizeof (canfd_on ));
354357
355358 if (ioctl (s [i ], SIOCGIFINDEX , & ifr ) < 0 ) {
356359 perror ("SIOCGIFINDEX" );
@@ -402,9 +405,11 @@ int main(int argc, char **argv)
402405 }
403406
404407 stat [i ].recv_frames ++ ;
405- stat [i ].recv_bits_payload += frame .can_dlc * 8 ;
406- stat [i ].recv_bits_total += can_frame_length ((struct canfd_frame * )& frame ,
407- mode , sizeof (frame ));
408+ stat [i ].recv_bits_payload += frame .len * 8 ;
409+ stat [i ].recv_bits_dbitrate += can_frame_dbitrate_length (
410+ & frame , mode , sizeof (frame ));
411+ stat [i ].recv_bits_total += can_frame_length (& frame ,
412+ mode , nbytes );
408413 }
409414 }
410415 }
0 commit comments