]> rtime.felk.cvut.cz Git - socketcan-devel.git/commitdiff
updated tst-raw.c to check RAW sockopt functionality on Kernel 2.6
authorhartkopp <hartkopp@030b6a49-0b11-0410-94ab-b0dab22257f2>
Tue, 29 Aug 2006 12:31:50 +0000 (12:31 +0000)
committerhartkopp <hartkopp@030b6a49-0b11-0410-94ab-b0dab22257f2>
Tue, 29 Aug 2006 12:31:50 +0000 (12:31 +0000)
git-svn-id: svn://svn.berlios.de//socketcan/trunk@60 030b6a49-0b11-0410-94ab-b0dab22257f2

test/tst-raw.c

index 320ba98f0bae20d5542859316637687d2abba5df..f084dd733572413080cfe829323ad69a002e4ea5 100644 (file)
@@ -70,11 +70,34 @@ int main(int argc, char **argv)
     int ifindex;
     int opt;
 
-    while ((opt = getopt(argc, argv, "i:")) != -1) {
+    /* sockopt test */
+    int loopback = 0;
+    int set_loopback = 0;
+    int recv_own_msgs = 0;
+    int set_recv_own_msgs = 0;
+    int send_one_frame = 0;
+
+    while ((opt = getopt(argc, argv, "i:l:r:s")) != -1) {
         switch (opt) {
+
         case 'i':
            ifname = optarg;
             break;
+
+        case 'l':
+           loopback = atoi(optarg);
+           set_loopback = 1;
+            break;
+
+        case 'r':
+           recv_own_msgs = atoi(optarg);
+           set_recv_own_msgs = 1;
+            break;
+
+        case 's':
+           send_one_frame = 1;
+            break;
+
         default:
             fprintf(stderr, "Unknown option %c\n", opt);
             break;
@@ -98,6 +121,12 @@ int main(int argc, char **argv)
 
     setsockopt(s, SOL_CAN_RAW, CAN_RAW_FILTER, &rfilter, sizeof(rfilter));
 
+    if(set_loopback)
+         setsockopt(s, SOL_CAN_RAW, CAN_RAW_LOOPBACK, &loopback, sizeof(loopback));
+
+    if(set_recv_own_msgs)
+      setsockopt(s, SOL_CAN_RAW, CAN_RAW_RECV_OWN_MSGS, &recv_own_msgs, sizeof(recv_own_msgs));
+
     strcpy(ifr.ifr_name, ifname);
     ioctl(s, SIOCGIFINDEX, &ifr);
     ifindex = ifr.ifr_ifindex;
@@ -110,6 +139,16 @@ int main(int argc, char **argv)
       return 1;
     }
 
+       if(send_one_frame) {
+
+         frame.can_id  = 0x123;
+         frame.can_dlc = 2;
+         frame.data[0] = 0x11;
+         frame.data[1] = 0x22;
+
+         nbytes = write(s, &frame, sizeof(struct can_frame));
+       }
+
     while (1) {
 
        if ((nbytes = read(s, &frame, sizeof(struct can_frame))) < 0) {