]> rtime.felk.cvut.cz Git - can-utils.git/blobdiff - isotpdump.c
isotp.h: add explicit license information
[can-utils.git] / isotpdump.c
index 22b81414e302f25c92b52e86cfcf254908f60393..72cb121222911c8c0278da5d224a43fcd6624208 100644 (file)
@@ -1,7 +1,3 @@
-/*
- *  $Id$
- */
-
 /*
  * isotpdump.c - dump and explain ISO15765-2 protocol CAN frames
  *
@@ -41,7 +37,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
  * DAMAGE.
  *
- * Send feedback to <socketcan-users@lists.berlios.de>
+ * Send feedback to <linux-can@vger.kernel.org>
  *
  */
 
@@ -103,7 +99,7 @@ int main(int argc, char **argv)
        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);
@@ -144,10 +140,15 @@ int main(int argc, char **argv)
                        }
                        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;
                }
        }
@@ -162,17 +163,22 @@ int main(int argc, char **argv)
                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));