mirror of
https://github.com/linux-can/can-utils.git
synced 2026-08-05 14:29:54 +02:00
isotpsniffer: Add support for llopts
This commit is contained in:
+25
-1
@@ -76,6 +76,7 @@ void print_usage(char *prg)
|
|||||||
fprintf(stderr, " -c (color mode)\n");
|
fprintf(stderr, " -c (color mode)\n");
|
||||||
fprintf(stderr, " -t <type> (timestamp: (a)bsolute/(d)elta/(z)ero/(A)bsolute w date)\n");
|
fprintf(stderr, " -t <type> (timestamp: (a)bsolute/(d)elta/(z)ero/(A)bsolute w date)\n");
|
||||||
fprintf(stderr, " -f <format> (1 = HEX, 2 = ASCII, 3 = HEX & ASCII - default: %d)\n", FORMAT_DEFAULT);
|
fprintf(stderr, " -f <format> (1 = HEX, 2 = ASCII, 3 = HEX & ASCII - default: %d)\n", FORMAT_DEFAULT);
|
||||||
|
fprintf(stderr, " -L <mtu>:<tx_dl>:<tx_flags> (link layer options for CAN FD)\n");
|
||||||
fprintf(stderr, " -h <len> (head: print only first <len> bytes)\n");
|
fprintf(stderr, " -h <len> (head: print only first <len> bytes)\n");
|
||||||
fprintf(stderr, "\nCAN IDs and addresses are given and expected in hexadecimal values.\n");
|
fprintf(stderr, "\nCAN IDs and addresses are given and expected in hexadecimal values.\n");
|
||||||
fprintf(stderr, "\n");
|
fprintf(stderr, "\n");
|
||||||
@@ -180,6 +181,7 @@ int main(int argc, char **argv)
|
|||||||
struct sockaddr_can addr;
|
struct sockaddr_can addr;
|
||||||
char if_name[IFNAMSIZ];
|
char if_name[IFNAMSIZ];
|
||||||
static struct can_isotp_options opts;
|
static struct can_isotp_options opts;
|
||||||
|
static struct can_isotp_ll_options llopts;
|
||||||
int r = 0;
|
int r = 0;
|
||||||
int opt, quit = 0;
|
int opt, quit = 0;
|
||||||
int color = 0;
|
int color = 0;
|
||||||
@@ -194,7 +196,7 @@ int main(int argc, char **argv)
|
|||||||
unsigned char buffer[4096];
|
unsigned char buffer[4096];
|
||||||
int nbytes;
|
int nbytes;
|
||||||
|
|
||||||
while ((opt = getopt(argc, argv, "s:d:x:X:h:ct:f:?")) != -1) {
|
while ((opt = getopt(argc, argv, "s:d:x:X:h:ct:f:L:?")) != -1) {
|
||||||
switch (opt) {
|
switch (opt) {
|
||||||
case 's':
|
case 's':
|
||||||
src = strtoul(optarg, (char **)NULL, 16);
|
src = strtoul(optarg, (char **)NULL, 16);
|
||||||
@@ -222,6 +224,17 @@ int main(int argc, char **argv)
|
|||||||
format = (atoi(optarg) & (FORMAT_ASCII | FORMAT_HEX));
|
format = (atoi(optarg) & (FORMAT_ASCII | FORMAT_HEX));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'L':
|
||||||
|
if (sscanf(optarg, "%hhu:%hhu:%hhu",
|
||||||
|
&llopts.mtu,
|
||||||
|
&llopts.tx_dl,
|
||||||
|
&llopts.tx_flags) != 3) {
|
||||||
|
printf("unknown link layer options '%s'.\n", optarg);
|
||||||
|
print_usage(basename(argv[0]));
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case 'h':
|
case 'h':
|
||||||
head = atoi(optarg);
|
head = atoi(optarg);
|
||||||
break;
|
break;
|
||||||
@@ -309,6 +322,17 @@ int main(int argc, char **argv)
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((setsockopt(s, SOL_CAN_ISOTP, CAN_ISOTP_LL_OPTS, &llopts, sizeof(llopts))) < 0) {
|
||||||
|
perror("setsockopt");
|
||||||
|
r = 1;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
if ((setsockopt(t, SOL_CAN_ISOTP, CAN_ISOTP_LL_OPTS, &llopts, sizeof(llopts))) < 0) {
|
||||||
|
perror("setsockopt");
|
||||||
|
r = 1;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
addr.can_addr.tp.tx_id = dst;
|
addr.can_addr.tp.tx_id = dst;
|
||||||
addr.can_addr.tp.rx_id = src;
|
addr.can_addr.tp.rx_id = src;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user