Added option '-l' to disable local loopback for generated data.
parent
f1e643f8f1
commit
c2c6579bd6
30
cangen.c
30
cangen.c
|
|
@ -77,19 +77,21 @@ void print_usage(char *prg)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "\n%s: generate random CAN frames\n\n", prg);
|
fprintf(stderr, "\n%s: generate random CAN frames\n\n", prg);
|
||||||
fprintf(stderr, "Usage: %s [can-interface]\n", prg);
|
fprintf(stderr, "Usage: %s [can-interface]\n", prg);
|
||||||
fprintf(stderr, "Options: -g <ms> (gap in milli seconds) "
|
fprintf(stderr, "Options: -g <ms> (gap in milli seconds) "
|
||||||
"default: %d\n", DEFAULT_GAP);
|
"default: %d\n", DEFAULT_GAP);
|
||||||
fprintf(stderr, " -e (extended frame mode) "
|
fprintf(stderr, " -e (extended frame mode) "
|
||||||
"default: standard frame format \n");
|
"default: standard frame format \n");
|
||||||
fprintf(stderr, " -I (fixed CAN ID) "
|
fprintf(stderr, " -I (fixed CAN ID) "
|
||||||
"default: 0x123\n");
|
"default: 0x123\n");
|
||||||
fprintf(stderr, " -D (fixed CAN Data) "
|
fprintf(stderr, " -D (fixed CAN Data) "
|
||||||
"default: 01 23 45 67 89 AB CD EF\n");
|
"default: 01 23 45 67 89 AB CD EF\n");
|
||||||
fprintf(stderr, " -L (fixed CAN DLC) "
|
fprintf(stderr, " -L (fixed CAN DLC) "
|
||||||
"default: 8\n");
|
"default: 8\n");
|
||||||
fprintf(stderr, " -f <canframe> (other fixed CAN frame) "
|
fprintf(stderr, " -f <canframe> (other fixed CAN frame) "
|
||||||
"default: 123#0123456789ABCDEF\n");
|
"default: 123#0123456789ABCDEF\n");
|
||||||
fprintf(stderr, " -v (verbose) "
|
fprintf(stderr, " -l (local loopback disable) "
|
||||||
|
"default: loopback\n");
|
||||||
|
fprintf(stderr, " -v (verbose) "
|
||||||
"default: don't print sent frames\n");
|
"default: don't print sent frames\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -106,6 +108,7 @@ int main(int argc, char **argv)
|
||||||
unsigned char fix_data = 0;
|
unsigned char fix_data = 0;
|
||||||
unsigned char fix_dlc = 0;
|
unsigned char fix_dlc = 0;
|
||||||
unsigned char default_frame = 1;
|
unsigned char default_frame = 1;
|
||||||
|
unsigned char loopback_disable = 0;
|
||||||
unsigned char verbose = 0;
|
unsigned char verbose = 0;
|
||||||
|
|
||||||
int opt;
|
int opt;
|
||||||
|
|
@ -122,7 +125,7 @@ int main(int argc, char **argv)
|
||||||
signal(SIGHUP, sigterm);
|
signal(SIGHUP, sigterm);
|
||||||
signal(SIGINT, sigterm);
|
signal(SIGINT, sigterm);
|
||||||
|
|
||||||
while ((opt = getopt(argc, argv, "g:eIDLf:v")) != -1) {
|
while ((opt = getopt(argc, argv, "g:eIDLf:lv")) != -1) {
|
||||||
switch (opt) {
|
switch (opt) {
|
||||||
case 'g':
|
case 'g':
|
||||||
gap = strtoul(optarg, NULL, 10);
|
gap = strtoul(optarg, NULL, 10);
|
||||||
|
|
@ -156,6 +159,10 @@ int main(int argc, char **argv)
|
||||||
verbose = 1;
|
verbose = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'l':
|
||||||
|
loopback_disable = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
print_usage(basename(argv[0]));
|
print_usage(basename(argv[0]));
|
||||||
exit(1);
|
exit(1);
|
||||||
|
|
@ -210,6 +217,13 @@ int main(int argc, char **argv)
|
||||||
/* little (really a very little!) CPU usage. */
|
/* little (really a very little!) CPU usage. */
|
||||||
setsockopt(s, SOL_CAN_RAW, CAN_RAW_FILTER, NULL, 0);
|
setsockopt(s, SOL_CAN_RAW, CAN_RAW_FILTER, NULL, 0);
|
||||||
|
|
||||||
|
if (loopback_disable) {
|
||||||
|
int loopback = 0;
|
||||||
|
|
||||||
|
setsockopt(s, SOL_CAN_RAW, CAN_RAW_LOOPBACK,
|
||||||
|
&loopback, sizeof(loopback));
|
||||||
|
}
|
||||||
|
|
||||||
if (bind(s, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
|
if (bind(s, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
|
||||||
perror("bind");
|
perror("bind");
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue