isotpsniffer: Add support for llopts
parent
b04108c615
commit
da33f96edf
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue