Merge pull request #65 from BastianStender/bst/j1939-fix-jacd
jacd: add verbosity and fix missing interfacepull/76/merge
commit
a6469df2c0
3
Makefile
3
Makefile
|
|
@ -86,6 +86,7 @@ canbusload.o: lib.h
|
||||||
log2long.o: lib.h
|
log2long.o: lib.h
|
||||||
log2asc.o: lib.h
|
log2asc.o: lib.h
|
||||||
asc2log.o: lib.h
|
asc2log.o: lib.h
|
||||||
|
jacd.o: libj1939.h
|
||||||
jspy.o: libj1939.h
|
jspy.o: libj1939.h
|
||||||
jsr.o: libj1939.h
|
jsr.o: libj1939.h
|
||||||
testj1939.o: libj1939.h
|
testj1939.o: libj1939.h
|
||||||
|
|
@ -100,7 +101,7 @@ log2long: log2long.o lib.o
|
||||||
log2asc: log2asc.o lib.o
|
log2asc: log2asc.o lib.o
|
||||||
asc2log: asc2log.o lib.o
|
asc2log: asc2log.o lib.o
|
||||||
canbusload: canbusload.o canframelen.o
|
canbusload: canbusload.o canframelen.o
|
||||||
|
jacd: jacd.o libj1939.o
|
||||||
jspy: jspy.o libj1939.o
|
jspy: jspy.o libj1939.o
|
||||||
jsr: jsr.o libj1939.o
|
jsr: jsr.o libj1939.o
|
||||||
testj1939: testj1939.o libj1939.o
|
testj1939: testj1939.o libj1939.o
|
||||||
|
|
|
||||||
21
jacd.c
21
jacd.c
|
|
@ -22,9 +22,12 @@
|
||||||
#include <error.h>
|
#include <error.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
#include <net/if.h>
|
||||||
#include <linux/can.h>
|
#include <linux/can.h>
|
||||||
#include <linux/can/j1939.h>
|
#include <linux/can/j1939.h>
|
||||||
|
|
||||||
|
#include "libj1939.h"
|
||||||
|
|
||||||
static const char help_msg[] =
|
static const char help_msg[] =
|
||||||
"jacd: An SAE J1939 address claiming daemon" "\n"
|
"jacd: An SAE J1939 address claiming daemon" "\n"
|
||||||
"Usage: jacd [options] NAME [INTF]" "\n"
|
"Usage: jacd [options] NAME [INTF]" "\n"
|
||||||
|
|
@ -194,28 +197,39 @@ static int open_socket(const char *device, uint64_t name)
|
||||||
.addr = J1939_IDLE_ADDR,
|
.addr = J1939_IDLE_ADDR,
|
||||||
.pgn = 0x0ee00,
|
.pgn = 0x0ee00,
|
||||||
},
|
},
|
||||||
|
.can_ifindex = if_nametoindex(s.intf),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (s.verbose)
|
||||||
|
fprintf(stderr, "- socket(PF_CAN, SOCK_DGRAM, CAN_J1939);\n");
|
||||||
sock = ret = socket(PF_CAN, SOCK_DGRAM, CAN_J1939);
|
sock = ret = socket(PF_CAN, SOCK_DGRAM, CAN_J1939);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
error(1, errno, "socket(j1939)");
|
error(1, errno, "socket(j1939)");
|
||||||
|
|
||||||
|
if (s.verbose)
|
||||||
|
fprintf(stderr, "- setsockopt(, SOL_SOCKET, SO_BINDTODEVICE, %s, %zd);\n", device, strlen(device));
|
||||||
ret = setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE,
|
ret = setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE,
|
||||||
device, strlen(device));
|
device, strlen(device));
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
error(1, errno, "bindtodevice %s", device);
|
error(1, errno, "bindtodevice %s", device);
|
||||||
|
|
||||||
|
if (s.verbose)
|
||||||
|
fprintf(stderr, "- setsockopt(, SOL_CAN_J1939, SO_J1939_FILTER, <filter>, %zd);\n", sizeof(filt));
|
||||||
ret = setsockopt(sock, SOL_CAN_J1939, SO_J1939_FILTER,
|
ret = setsockopt(sock, SOL_CAN_J1939, SO_J1939_FILTER,
|
||||||
&filt, sizeof(filt));
|
&filt, sizeof(filt));
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
error(1, errno, "setsockopt filter");
|
error(1, errno, "setsockopt filter");
|
||||||
|
|
||||||
value = 1;
|
value = 1;
|
||||||
|
if (s.verbose)
|
||||||
|
fprintf(stderr, "- setsockopt(, SOL_CAN_J1939, SO_J1939_RECV_OWN, %d, %zd);\n", value, sizeof(value));
|
||||||
ret = setsockopt(sock, SOL_CAN_J1939, SO_J1939_RECV_OWN,
|
ret = setsockopt(sock, SOL_CAN_J1939, SO_J1939_RECV_OWN,
|
||||||
&value, sizeof(value));
|
&value, sizeof(value));
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
error(1, errno, "setsockopt receive own msgs");
|
error(1, errno, "setsockopt receive own msgs");
|
||||||
|
|
||||||
|
if (s.verbose)
|
||||||
|
fprintf(stderr, "- bind(, %s, %zi);\n", libj1939_addr2str(&saddr), sizeof(saddr));
|
||||||
ret = bind(sock, (void *)&saddr, sizeof(saddr));
|
ret = bind(sock, (void *)&saddr, sizeof(saddr));
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
error(1, errno, "bind()");
|
error(1, errno, "bind()");
|
||||||
|
|
@ -231,6 +245,8 @@ static int repeat_address(int sock, uint64_t name)
|
||||||
memcpy(dat, &name, 8);
|
memcpy(dat, &name, 8);
|
||||||
if (!host_is_little_endian())
|
if (!host_is_little_endian())
|
||||||
bswap(dat, 8);
|
bswap(dat, 8);
|
||||||
|
if (s.verbose)
|
||||||
|
fprintf(stderr, "- send(, %" PRId64 ", 8, 0);\n", name);
|
||||||
ret = send(sock, dat, 8, 0);
|
ret = send(sock, dat, 8, 0);
|
||||||
if (must_warn(ret))
|
if (must_warn(ret))
|
||||||
error(1, errno, "send address claim for 0x%02x", s.last_sa);
|
error(1, errno, "send address claim for 0x%02x", s.last_sa);
|
||||||
|
|
@ -246,8 +262,11 @@ static int claim_address(int sock, uint64_t name, int sa)
|
||||||
.addr = sa,
|
.addr = sa,
|
||||||
.pgn = 0x0ee00,
|
.pgn = 0x0ee00,
|
||||||
},
|
},
|
||||||
|
.can_ifindex = if_nametoindex(s.intf),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (s.verbose)
|
||||||
|
fprintf(stderr, "- bind(, %s, %zi);\n", libj1939_addr2str(&saddr), sizeof(saddr));
|
||||||
ret = bind(sock, (void *)&saddr, sizeof(saddr));
|
ret = bind(sock, (void *)&saddr, sizeof(saddr));
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
error(1, errno, "rebind with sa 0x%02x", sa);
|
error(1, errno, "rebind with sa 0x%02x", sa);
|
||||||
|
|
@ -265,6 +284,8 @@ static int request_addresses(int sock)
|
||||||
.can_addr.j1939.addr = J1939_NO_ADDR,
|
.can_addr.j1939.addr = J1939_NO_ADDR,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (s.verbose)
|
||||||
|
fprintf(stderr, "- sendto(, { 0, 0xee, 0, }, %zi, 0, %s, %zi);\n", sizeof(dat), libj1939_addr2str(&saddr), sizeof(saddr));
|
||||||
ret = sendto(sock, dat, sizeof(dat), 0, (void *)&saddr, sizeof(saddr));
|
ret = sendto(sock, dat, sizeof(dat), 0, (void *)&saddr, sizeof(saddr));
|
||||||
if (must_warn(ret))
|
if (must_warn(ret))
|
||||||
error(1, errno, "send request for address claims");
|
error(1, errno, "send request for address claims");
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue