]> rtime.felk.cvut.cz Git - can-utils.git/commitdiff
isotp[send|recv]: support PDU sizes greater than 4095
authorOliver Hartkopp <socketcan@hartkopp.net>
Fri, 24 Oct 2014 18:41:11 +0000 (20:41 +0200)
committerOliver Hartkopp <socketcan@hartkopp.net>
Fri, 24 Oct 2014 18:41:11 +0000 (20:41 +0200)
Allow PDU sizes greater than 4095 to be able to check the correct
implementation of the kernel socket API error handlings.

Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net>
isotprecv.c
isotpsend.c

index 9341e9600fb92ce1c143101843646f37fdd2cfbe..a43a25afb8a6cdb96d26561d64e53af5718f3587 100644 (file)
@@ -56,6 +56,7 @@
 #include <linux/can/isotp.h>
 
 #define NO_CAN_ID 0xFFFFFFFFU
+#define BUFSIZE 5000 /* size > 4095 to check socket API internal checks */
 
 void print_usage(char *prg)
 {
@@ -87,7 +88,7 @@ int main(int argc, char **argv)
     __u32 force_rx_stmin = 0;
     int loop = 0;
 
-    unsigned char msg[4096];
+    unsigned char msg[BUFSIZE];
     int nbytes;
 
     addr.can_addr.tp.tx_id = addr.can_addr.tp.rx_id = NO_CAN_ID;
@@ -194,8 +195,8 @@ int main(int argc, char **argv)
     }
 
     do {
-           nbytes = read(s, msg, 4096);
-           if (nbytes > 0 && nbytes < 4096)
+           nbytes = read(s, msg, BUFSIZE);
+           if (nbytes > 0 && nbytes < BUFSIZE)
                    for (i=0; i < nbytes; i++)
                            printf("%02X ", msg[i]);
            printf("\n");
index f151380d7b1849b1a7cc8413ebbd7a2bcdad0856..2b3f5699bc54043575e99d1dc41ddf8efa48d47c 100644 (file)
@@ -56,6 +56,7 @@
 #include <linux/can/isotp.h>
 
 #define NO_CAN_ID 0xFFFFFFFFU
+#define BUFSIZE 5000 /* size > 4095 to check socket API internal checks */
 
 void print_usage(char *prg)
 {
@@ -81,8 +82,9 @@ int main(int argc, char **argv)
     int opt;
     extern int optind, opterr, optopt;
     __u32 force_tx_stmin = 0;
-    unsigned char buf[4096];
+    unsigned char buf[BUFSIZE];
     int buflen = 0;
+    int retval = 0;
 
     addr.can_addr.tp.tx_id = addr.can_addr.tp.rx_id = NO_CAN_ID;
 
@@ -174,10 +176,17 @@ int main(int argc, char **argv)
        exit(1);
     }
 
-    while (buflen < 4096 && scanf("%hhx", &buf[buflen]) == 1)
+    while (buflen < BUFSIZE && scanf("%hhx", &buf[buflen]) == 1)
            buflen++;
 
-    write(s, buf, buflen);
+    retval = write(s, buf, buflen);
+    if (retval < 0) {
+           perror("write");
+           return retval;
+    }
+
+    if (retval != buflen)
+           fprintf(stderr, "wrote only %d from %d byte\n", retval, buflen);
 
     /* 
      * due to a Kernel internal wait queue the PDU is sent completely