/*
- * $Id: isotpdump.c 824 2008-09-02 07:01:51Z hartko $
+ * $Id$
*/
/*
last_tv.tv_sec = 0;
last_tv.tv_usec = 0;
- while ((opt = getopt(argc, argv, "s:d:ax:ct:")) != -1) {
+ while ((opt = getopt(argc, argv, "s:d:ax:ct:?")) != -1) {
switch (opt) {
case 's':
src = strtoul(optarg, (char **)NULL, 16);
}
break;
+ case '?':
+ print_usage(basename(argv[0]));
+ exit(0);
+ break;
+
default:
fprintf(stderr, "Unknown option %c\n", opt);
print_usage(basename(argv[0]));
- exit(0);
+ exit(1);
break;
}
}
return 1;
}
- rfilter[0].can_id = src;
- if (src & CAN_EFF_FLAG)
- rfilter[0].can_mask = CAN_EFF_MASK | CAN_EFF_FLAG;
- else
- rfilter[0].can_mask = CAN_SFF_MASK;
-
- rfilter[1].can_id = dst;
- if (dst & CAN_EFF_FLAG)
- rfilter[1].can_mask = CAN_EFF_MASK | CAN_EFF_FLAG;
- else
- rfilter[1].can_mask = CAN_SFF_MASK;
+
+ if (src & CAN_EFF_FLAG) {
+ rfilter[0].can_id = src & (CAN_EFF_MASK | CAN_EFF_FLAG);
+ rfilter[0].can_mask = (CAN_EFF_MASK|CAN_EFF_FLAG|CAN_RTR_FLAG);
+ } else {
+ rfilter[0].can_id = src & CAN_SFF_MASK;
+ rfilter[0].can_mask = (CAN_SFF_MASK|CAN_EFF_FLAG|CAN_RTR_FLAG);
+ }
+
+ if (dst & CAN_EFF_FLAG) {
+ rfilter[1].can_id = dst & (CAN_EFF_MASK | CAN_EFF_FLAG);
+ rfilter[1].can_mask = (CAN_EFF_MASK|CAN_EFF_FLAG|CAN_RTR_FLAG);
+ } else {
+ rfilter[1].can_id = dst & CAN_SFF_MASK;
+ rfilter[1].can_mask = (CAN_SFF_MASK|CAN_EFF_FLAG|CAN_RTR_FLAG);
+ }
setsockopt(s, SOL_CAN_RAW, CAN_RAW_FILTER, &rfilter, sizeof(rfilter));