Merge pull request #163 from marckleinebudde/libmusl-fix
treewide: Fix compilation on libmusl, replace error() by err()pull/165/head
commit
35b2ef691c
58
jacd.c
58
jacd.c
|
|
@ -20,7 +20,7 @@
|
||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
#include <error.h>
|
#include <err.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <net/if.h>
|
#include <net/if.h>
|
||||||
|
|
@ -155,12 +155,12 @@ static int parse_range(char *str)
|
||||||
for (tok = strtok(str, ",;"); tok; tok = strtok(NULL, ",;")) {
|
for (tok = strtok(str, ",;"); tok; tok = strtok(NULL, ",;")) {
|
||||||
a0 = ae = strtoul(tok, &endp, 0);
|
a0 = ae = strtoul(tok, &endp, 0);
|
||||||
if (endp <= tok)
|
if (endp <= tok)
|
||||||
error(1, 0, "parsing range '%s'", tok);
|
err(1, "parsing range '%s'", tok);
|
||||||
if (*endp == '-') {
|
if (*endp == '-') {
|
||||||
tok = endp+1;
|
tok = endp+1;
|
||||||
ae = strtoul(tok, &endp, 0);
|
ae = strtoul(tok, &endp, 0);
|
||||||
if (endp <= tok)
|
if (endp <= tok)
|
||||||
error(1, 0, "parsing addr '%s'", tok);
|
err(1, "parsing addr '%s'", tok);
|
||||||
if (ae < a0)
|
if (ae < a0)
|
||||||
ae = a0;
|
ae = a0;
|
||||||
}
|
}
|
||||||
|
|
@ -205,21 +205,21 @@ static int open_socket(const char *device, uint64_t name)
|
||||||
fprintf(stderr, "- socket(PF_CAN, SOCK_DGRAM, CAN_J1939);\n");
|
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)");
|
err(1, "socket(j1939)");
|
||||||
|
|
||||||
if (s.verbose)
|
if (s.verbose)
|
||||||
fprintf(stderr, "- setsockopt(, SOL_SOCKET, SO_BINDTODEVICE, %s, %zd);\n", device, strlen(device));
|
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);
|
err(1, "bindtodevice %s", device);
|
||||||
|
|
||||||
if (s.verbose)
|
if (s.verbose)
|
||||||
fprintf(stderr, "- setsockopt(, SOL_CAN_J1939, SO_J1939_FILTER, <filter>, %zd);\n", sizeof(filt));
|
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");
|
err(1, "setsockopt filter");
|
||||||
|
|
||||||
value = 1;
|
value = 1;
|
||||||
if (s.verbose)
|
if (s.verbose)
|
||||||
|
|
@ -227,13 +227,13 @@ static int open_socket(const char *device, uint64_t name)
|
||||||
ret = setsockopt(sock, SOL_SOCKET, SO_BROADCAST,
|
ret = setsockopt(sock, SOL_SOCKET, SO_BROADCAST,
|
||||||
&value, sizeof(value));
|
&value, sizeof(value));
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
error(1, errno, "setsockopt set broadcast");
|
err(1, "setsockopt set broadcast");
|
||||||
|
|
||||||
if (s.verbose)
|
if (s.verbose)
|
||||||
fprintf(stderr, "- bind(, %s, %zi);\n", libj1939_addr2str(&saddr), sizeof(saddr));
|
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()");
|
err(1, "bind()");
|
||||||
return sock;
|
return sock;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -258,7 +258,7 @@ static int repeat_address(int sock, uint64_t name)
|
||||||
ret = sendto(sock, dat, sizeof(dat), 0, (const struct sockaddr *)&saddr,
|
ret = sendto(sock, dat, sizeof(dat), 0, (const struct sockaddr *)&saddr,
|
||||||
sizeof(saddr));
|
sizeof(saddr));
|
||||||
if (must_warn(ret))
|
if (must_warn(ret))
|
||||||
error(1, errno, "send address claim for 0x%02x", s.last_sa);
|
err(1, "send address claim for 0x%02x", s.last_sa);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
static int claim_address(int sock, uint64_t name, int sa)
|
static int claim_address(int sock, uint64_t name, int sa)
|
||||||
|
|
@ -278,7 +278,7 @@ static int claim_address(int sock, uint64_t name, int sa)
|
||||||
fprintf(stderr, "- bind(, %s, %zi);\n", libj1939_addr2str(&saddr), sizeof(saddr));
|
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);
|
err(1, "rebind with sa 0x%02x", sa);
|
||||||
s.last_sa = sa;
|
s.last_sa = sa;
|
||||||
return repeat_address(sock, name);
|
return repeat_address(sock, name);
|
||||||
}
|
}
|
||||||
|
|
@ -297,7 +297,7 @@ static int request_addresses(int sock)
|
||||||
fprintf(stderr, "- sendto(, { 0, 0xee, 0, }, %zi, 0, %s, %zi);\n", sizeof(dat), libj1939_addr2str(&saddr), sizeof(saddr));
|
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");
|
err(1, "send request for address claims");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -365,7 +365,7 @@ static void install_signal(int sig)
|
||||||
sigfillset(&sigact.sa_mask);
|
sigfillset(&sigact.sa_mask);
|
||||||
ret = sigaction(sig, &sigact, NULL);
|
ret = sigaction(sig, &sigact, NULL);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
error(1, errno, "sigaction for signal %i", sig);
|
err(1, "sigaction for signal %i", sig);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void schedule_itimer(int msec)
|
static void schedule_itimer(int msec)
|
||||||
|
|
@ -381,7 +381,7 @@ static void schedule_itimer(int msec)
|
||||||
ret = setitimer(ITIMER_REAL, &val, NULL);
|
ret = setitimer(ITIMER_REAL, &val, NULL);
|
||||||
} while ((ret < 0) && (errno == EINTR));
|
} while ((ret < 0) && (errno == EINTR));
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
error(1, errno, "setitimer %i msec", msec);
|
err(1, "setitimer %i msec", msec);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* dump status */
|
/* dump status */
|
||||||
|
|
@ -422,7 +422,7 @@ static void save_cache(void)
|
||||||
return;
|
return;
|
||||||
fp = fopen(s.cachefile, "w");
|
fp = fopen(s.cachefile, "w");
|
||||||
if (!fp)
|
if (!fp)
|
||||||
error(1, errno, "fopen %s, w", s.cachefile);
|
err(1, "fopen %s, w", s.cachefile);
|
||||||
|
|
||||||
time(&t);
|
time(&t);
|
||||||
fprintf(fp, "# saved on %s\n", ctime(&t));
|
fprintf(fp, "# saved on %s\n", ctime(&t));
|
||||||
|
|
@ -445,7 +445,7 @@ static void restore_cache(void)
|
||||||
if (!fp) {
|
if (!fp) {
|
||||||
if (ENOENT == errno)
|
if (ENOENT == errno)
|
||||||
return;
|
return;
|
||||||
error(1, errno, "fopen %s, r", s.cachefile);
|
err(1, "fopen %s, r", s.cachefile);
|
||||||
}
|
}
|
||||||
while (!feof(fp)) {
|
while (!feof(fp)) {
|
||||||
ret = getline(&line, &sz, fp);
|
ret = getline(&line, &sz, fp);
|
||||||
|
|
@ -494,9 +494,9 @@ int main(int argc, char *argv[])
|
||||||
case 'p':
|
case 'p':
|
||||||
#ifdef _GNU_SOURCE
|
#ifdef _GNU_SOURCE
|
||||||
if (asprintf(&program_invocation_name, "%s.%s", program_invocation_short_name, optarg) < 0)
|
if (asprintf(&program_invocation_name, "%s.%s", program_invocation_short_name, optarg) < 0)
|
||||||
error(1, errno, "asprintf(program invocation name)");
|
err(1, "asprintf(program invocation name)");
|
||||||
#else
|
#else
|
||||||
error(0, 0, "compile with -D_GNU_SOURCE to use -p");
|
err(0, "compile with -D_GNU_SOURCE to use -p");
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
@ -515,18 +515,18 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
ret = parse_range(s.ranges);
|
ret = parse_range(s.ranges);
|
||||||
if (!ret)
|
if (!ret)
|
||||||
error(1, 0, "no addresses in range");
|
err(1, "no addresses in range");
|
||||||
|
|
||||||
if ((s.current_sa < J1939_IDLE_ADDR) && !(addr[s.current_sa].flags & F_USE)) {
|
if ((s.current_sa < J1939_IDLE_ADDR) && !(addr[s.current_sa].flags & F_USE)) {
|
||||||
if (s.verbose)
|
if (s.verbose)
|
||||||
error(0, 0, "forget saved address 0x%02x", s.current_sa);
|
err(0, "forget saved address 0x%02x", s.current_sa);
|
||||||
s.current_sa = J1939_IDLE_ADDR;
|
s.current_sa = J1939_IDLE_ADDR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (s.verbose)
|
if (s.verbose)
|
||||||
error(0, 0, "ready for %s:%016llx", s.intf, (long long)s.name);
|
err(0, "ready for %s:%016llx", s.intf, (long long)s.name);
|
||||||
if (!s.intf || !s.name)
|
if (!s.intf || !s.name)
|
||||||
error(1, 0, "bad arguments");
|
err(1, "bad arguments");
|
||||||
ret = sock = open_socket(s.intf, s.name);
|
ret = sock = open_socket(s.intf, s.name);
|
||||||
sock_rx = open_socket(s.intf, s.name);
|
sock_rx = open_socket(s.intf, s.name);
|
||||||
|
|
||||||
|
|
@ -545,7 +545,7 @@ int main(int argc, char *argv[])
|
||||||
case STATE_INITIAL:
|
case STATE_INITIAL:
|
||||||
ret = request_addresses(sock);
|
ret = request_addresses(sock);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
error(1, errno, "could not sent initial request");
|
err(1, "could not sent initial request");
|
||||||
s.state = STATE_REQ_SENT;
|
s.state = STATE_REQ_SENT;
|
||||||
break;
|
break;
|
||||||
case STATE_REQ_PENDING:
|
case STATE_REQ_PENDING:
|
||||||
|
|
@ -555,7 +555,7 @@ int main(int argc, char *argv[])
|
||||||
/* claim addr */
|
/* claim addr */
|
||||||
sa = choose_new_sa(s.name, s.current_sa);
|
sa = choose_new_sa(s.name, s.current_sa);
|
||||||
if (sa == J1939_IDLE_ADDR)
|
if (sa == J1939_IDLE_ADDR)
|
||||||
error(1, 0, "no free address to use");
|
err(1, "no free address to use");
|
||||||
ret = claim_address(sock, s.name, sa);
|
ret = claim_address(sock, s.name, sa);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
schedule_itimer(50);
|
schedule_itimer(50);
|
||||||
|
|
@ -576,7 +576,7 @@ int main(int argc, char *argv[])
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
if (EINTR == errno)
|
if (EINTR == errno)
|
||||||
continue;
|
continue;
|
||||||
error(1, errno, "recvfrom()");
|
err(1, "recvfrom()");
|
||||||
}
|
}
|
||||||
switch (saddr.can_addr.j1939.pgn) {
|
switch (saddr.can_addr.j1939.pgn) {
|
||||||
case J1939_PGN_REQUEST:
|
case J1939_PGN_REQUEST:
|
||||||
|
|
@ -588,7 +588,7 @@ int main(int argc, char *argv[])
|
||||||
break;
|
break;
|
||||||
if (s.state == STATE_REQ_SENT) {
|
if (s.state == STATE_REQ_SENT) {
|
||||||
if (s.verbose)
|
if (s.verbose)
|
||||||
error(0, 0, "request sent, pending for 1250 ms");
|
err(0, "request sent, pending for 1250 ms");
|
||||||
schedule_itimer(1250);
|
schedule_itimer(1250);
|
||||||
s.state = STATE_REQ_PENDING;
|
s.state = STATE_REQ_PENDING;
|
||||||
} else if (s.state == STATE_OPERATIONAL) {
|
} else if (s.state == STATE_OPERATIONAL) {
|
||||||
|
|
@ -618,14 +618,14 @@ int main(int argc, char *argv[])
|
||||||
/* ourselve, disable itimer */
|
/* ourselve, disable itimer */
|
||||||
s.current_sa = sa;
|
s.current_sa = sa;
|
||||||
if (s.verbose)
|
if (s.verbose)
|
||||||
error(0, 0, "claimed 0x%02x", sa);
|
err(0, "claimed 0x%02x", sa);
|
||||||
} else if (sa == s.current_sa) {
|
} else if (sa == s.current_sa) {
|
||||||
if (s.verbose)
|
if (s.verbose)
|
||||||
error(0, 0, "address collision for 0x%02x", sa);
|
err(0, "address collision for 0x%02x", sa);
|
||||||
if (s.name > saddr.can_addr.j1939.name) {
|
if (s.name > saddr.can_addr.j1939.name) {
|
||||||
sa = choose_new_sa(s.name, sa);
|
sa = choose_new_sa(s.name, sa);
|
||||||
if (sa == J1939_IDLE_ADDR) {
|
if (sa == J1939_IDLE_ADDR) {
|
||||||
error(0, 0, "no address left");
|
err(0, "no address left");
|
||||||
/* put J1939_IDLE_ADDR in cache file */
|
/* put J1939_IDLE_ADDR in cache file */
|
||||||
s.current_sa = sa;
|
s.current_sa = sa;
|
||||||
goto done;
|
goto done;
|
||||||
|
|
@ -650,7 +650,7 @@ int main(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
done:
|
done:
|
||||||
if (s.verbose)
|
if (s.verbose)
|
||||||
error(0, 0, "shutdown");
|
err(0, "shutdown");
|
||||||
claim_address(sock, s.name, J1939_IDLE_ADDR);
|
claim_address(sock, s.name, J1939_IDLE_ADDR);
|
||||||
save_cache();
|
save_cache();
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
||||||
13
jcat.c
13
jcat.c
|
|
@ -5,7 +5,6 @@
|
||||||
|
|
||||||
#include <err.h>
|
#include <err.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <error.h>
|
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#include <net/if.h>
|
#include <net/if.h>
|
||||||
|
|
@ -444,10 +443,10 @@ static size_t jcat_get_file_size(int fd)
|
||||||
|
|
||||||
offset = lseek(fd, 0, SEEK_END);
|
offset = lseek(fd, 0, SEEK_END);
|
||||||
if (offset == -1)
|
if (offset == -1)
|
||||||
error(1, errno, "%s lseek()\n", __func__);
|
err(1, "%s lseek()\n", __func__);
|
||||||
|
|
||||||
if (lseek(fd, 0, SEEK_SET) == -1)
|
if (lseek(fd, 0, SEEK_SET) == -1)
|
||||||
error(1, errno, "%s lseek() start\n", __func__);
|
err(1, "%s lseek() start\n", __func__);
|
||||||
|
|
||||||
return offset;
|
return offset;
|
||||||
}
|
}
|
||||||
|
|
@ -470,7 +469,7 @@ static int jcat_send(struct jcat_priv *priv)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (lseek(priv->infile, 0, SEEK_SET) == -1)
|
if (lseek(priv->infile, 0, SEEK_SET) == -1)
|
||||||
error(1, errno, "%s lseek() start\n", __func__);
|
err(1, "%s lseek() start\n", __func__);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
@ -557,7 +556,7 @@ static int jcat_sock_prepare(struct jcat_priv *priv)
|
||||||
|
|
||||||
if (setsockopt(priv->sock, SOL_SOCKET, SO_TIMESTAMPING,
|
if (setsockopt(priv->sock, SOL_SOCKET, SO_TIMESTAMPING,
|
||||||
(char *) &sock_opt, sizeof(sock_opt)))
|
(char *) &sock_opt, sizeof(sock_opt)))
|
||||||
error(1, 0, "setsockopt timestamping");
|
err(1, "setsockopt timestamping");
|
||||||
|
|
||||||
ret = bind(priv->sock, (void *)&priv->sockname, sizeof(priv->sockname));
|
ret = bind(priv->sock, (void *)&priv->sockname, sizeof(priv->sockname));
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
|
|
@ -592,7 +591,7 @@ static int jcat_parse_args(struct jcat_priv *priv, int argc, char *argv[])
|
||||||
case 'i':
|
case 'i':
|
||||||
priv->infile = open(optarg, O_RDONLY);
|
priv->infile = open(optarg, O_RDONLY);
|
||||||
if (priv->infile == -1)
|
if (priv->infile == -1)
|
||||||
error(EXIT_FAILURE, errno, "can't open input file");
|
err(EXIT_FAILURE, "can't open input file");
|
||||||
priv->todo_filesize = 1;
|
priv->todo_filesize = 1;
|
||||||
break;
|
break;
|
||||||
case 's':
|
case 's':
|
||||||
|
|
@ -647,7 +646,7 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
priv = malloc(sizeof(*priv));
|
priv = malloc(sizeof(*priv));
|
||||||
if (!priv)
|
if (!priv)
|
||||||
error(EXIT_FAILURE, errno, "can't allocate priv");
|
err(EXIT_FAILURE, "can't allocate priv");
|
||||||
|
|
||||||
bzero(priv, sizeof(*priv));
|
bzero(priv, sizeof(*priv));
|
||||||
|
|
||||||
|
|
|
||||||
29
jspy.c
29
jspy.c
|
|
@ -19,7 +19,7 @@
|
||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
#include <error.h>
|
#include <err.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
|
|
@ -105,9 +105,6 @@ int main(int argc, char **argv)
|
||||||
uint64_t dst_name;
|
uint64_t dst_name;
|
||||||
long recvflags;
|
long recvflags;
|
||||||
|
|
||||||
#ifdef _GNU_SOURCE
|
|
||||||
program_invocation_name = program_invocation_short_name;
|
|
||||||
#endif
|
|
||||||
/* argument parsing */
|
/* argument parsing */
|
||||||
while ((opt = getopt_long(argc, argv, optstring, long_opts, NULL)) != -1)
|
while ((opt = getopt_long(argc, argv, optstring, long_opts, NULL)) != -1)
|
||||||
switch (opt) {
|
switch (opt) {
|
||||||
|
|
@ -123,7 +120,7 @@ int main(int argc, char **argv)
|
||||||
case 't':
|
case 't':
|
||||||
if (optarg) {
|
if (optarg) {
|
||||||
if (!strchr("adzA", optarg[0]))
|
if (!strchr("adzA", optarg[0]))
|
||||||
error(1, 0, "unknown time option '%c'", optarg[0]);
|
err(1, "unknown time option '%c'", optarg[0]);
|
||||||
s.time = optarg[0];
|
s.time = optarg[0];
|
||||||
} else {
|
} else {
|
||||||
s.time = 'z';
|
s.time = 'z';
|
||||||
|
|
@ -138,19 +135,19 @@ int main(int argc, char **argv)
|
||||||
optarg = argv[optind];
|
optarg = argv[optind];
|
||||||
ret = libj1939_str2addr(optarg, 0, &s.addr);
|
ret = libj1939_str2addr(optarg, 0, &s.addr);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
error(0, 0, "bad URI %s", optarg);
|
err(0, "bad URI %s", optarg);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
buf = malloc(s.pkt_len);
|
buf = malloc(s.pkt_len);
|
||||||
if (!buf)
|
if (!buf)
|
||||||
error(1, errno, "malloc %u", s.pkt_len);
|
err(1, "malloc %u", s.pkt_len);
|
||||||
|
|
||||||
/* setup socket */
|
/* setup socket */
|
||||||
sock = socket(PF_CAN, SOCK_DGRAM, CAN_J1939);
|
sock = socket(PF_CAN, SOCK_DGRAM, CAN_J1939);
|
||||||
if (sock < 0)
|
if (sock < 0)
|
||||||
error(1, errno, "socket(can, dgram, j1939)");
|
err(1, "socket(can, dgram, j1939)");
|
||||||
|
|
||||||
memset(&filt, 0, sizeof(filt));
|
memset(&filt, 0, sizeof(filt));
|
||||||
if (s.addr.can_addr.j1939.name) {
|
if (s.addr.can_addr.j1939.name) {
|
||||||
|
|
@ -171,23 +168,23 @@ int main(int argc, char **argv)
|
||||||
if (filter) {
|
if (filter) {
|
||||||
ret = setsockopt(sock, SOL_CAN_J1939, SO_J1939_FILTER, &filt, sizeof(filt));
|
ret = setsockopt(sock, SOL_CAN_J1939, SO_J1939_FILTER, &filt, sizeof(filt));
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
error(1, errno, "setsockopt filter");
|
err(1, "setsockopt filter");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (s.promisc) {
|
if (s.promisc) {
|
||||||
ret = setsockopt(sock, SOL_CAN_J1939, SO_J1939_PROMISC, &ival_1, sizeof(ival_1));
|
ret = setsockopt(sock, SOL_CAN_J1939, SO_J1939_PROMISC, &ival_1, sizeof(ival_1));
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
error(1, errno, "setsockopt promisc");
|
err(1, "setsockopt promisc");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (s.time) {
|
if (s.time) {
|
||||||
ret = setsockopt(sock, SOL_SOCKET, SO_TIMESTAMP, &ival_1, sizeof(ival_1));
|
ret = setsockopt(sock, SOL_SOCKET, SO_TIMESTAMP, &ival_1, sizeof(ival_1));
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
error(1, errno, "setsockopt timestamp");
|
err(1, "setsockopt timestamp");
|
||||||
}
|
}
|
||||||
ret = setsockopt(sock, SOL_SOCKET, SO_RCVBUF, &s.pkt_len, sizeof(s.pkt_len));
|
ret = setsockopt(sock, SOL_SOCKET, SO_RCVBUF, &s.pkt_len, sizeof(s.pkt_len));
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
error(1, errno, "setsockopt rcvbuf %u", s.pkt_len);
|
err(1, "setsockopt rcvbuf %u", s.pkt_len);
|
||||||
|
|
||||||
/* bind(): to default, only ifindex is used. */
|
/* bind(): to default, only ifindex is used. */
|
||||||
memset(&src, 0, sizeof(src));
|
memset(&src, 0, sizeof(src));
|
||||||
|
|
@ -198,7 +195,7 @@ int main(int argc, char **argv)
|
||||||
src.can_addr.j1939.pgn = J1939_NO_PGN;
|
src.can_addr.j1939.pgn = J1939_NO_PGN;
|
||||||
ret = bind(sock, (void *)&src, sizeof(src));
|
ret = bind(sock, (void *)&src, sizeof(src));
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
error(1, errno, "bind(%s)", argv[1]);
|
err(1, "bind(%s)", argv[1]);
|
||||||
|
|
||||||
/* these settings are static and can be held out of the hot path */
|
/* these settings are static and can be held out of the hot path */
|
||||||
iov.iov_base = &buf[0];
|
iov.iov_base = &buf[0];
|
||||||
|
|
@ -209,7 +206,7 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
memset(&tref, 0, sizeof(tref));
|
memset(&tref, 0, sizeof(tref));
|
||||||
if (s.verbose)
|
if (s.verbose)
|
||||||
error(0, 0, "listening");
|
err(0, "listening");
|
||||||
while (1) {
|
while (1) {
|
||||||
/* these settings may be modified by recvmsg() */
|
/* these settings may be modified by recvmsg() */
|
||||||
iov.iov_len = s.pkt_len;
|
iov.iov_len = s.pkt_len;
|
||||||
|
|
@ -222,12 +219,12 @@ int main(int argc, char **argv)
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
switch (errno) {
|
switch (errno) {
|
||||||
case ENETDOWN:
|
case ENETDOWN:
|
||||||
error(0, errno, "ifindex %i", s.addr.can_ifindex);
|
err(0, "ifindex %i", s.addr.can_ifindex);
|
||||||
continue;
|
continue;
|
||||||
case EINTR:
|
case EINTR:
|
||||||
continue;
|
continue;
|
||||||
default:
|
default:
|
||||||
error(1, errno, "recvmsg(ifindex %i)", s.addr.can_ifindex);
|
err(1, "recvmsg(ifindex %i)", s.addr.can_ifindex);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
33
jsr.c
33
jsr.c
|
|
@ -18,7 +18,7 @@
|
||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
#include <error.h>
|
#include <err.h>
|
||||||
#include <poll.h>
|
#include <poll.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
|
@ -106,7 +106,7 @@ int main(int argc, char **argv)
|
||||||
case 's':
|
case 's':
|
||||||
s.pkt_len = strtoul(optarg, 0, 0);
|
s.pkt_len = strtoul(optarg, 0, 0);
|
||||||
if (!s.pkt_len)
|
if (!s.pkt_len)
|
||||||
error(1, EINVAL, "packet size of %s", optarg);
|
err(1, "packet size of %s", optarg);
|
||||||
break;
|
break;
|
||||||
case 'p':
|
case 'p':
|
||||||
s.priority = strtoul(optarg, 0, 0);
|
s.priority = strtoul(optarg, 0, 0);
|
||||||
|
|
@ -125,14 +125,14 @@ int main(int argc, char **argv)
|
||||||
optarg = argv[optind++];
|
optarg = argv[optind++];
|
||||||
ret = libj1939_str2addr(optarg, 0, &s.src);
|
ret = libj1939_str2addr(optarg, 0, &s.src);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
error(1, 0, "bad address spec [%s]", optarg);
|
err(1, "bad address spec [%s]", optarg);
|
||||||
s.defined |= DEF_SRC;
|
s.defined |= DEF_SRC;
|
||||||
}
|
}
|
||||||
if (argv[optind]) {
|
if (argv[optind]) {
|
||||||
optarg = argv[optind++];
|
optarg = argv[optind++];
|
||||||
ret = libj1939_str2addr(optarg, 0, &s.dst);
|
ret = libj1939_str2addr(optarg, 0, &s.dst);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
error(1, 0, "bad address spec [%s]", optarg);
|
err(1, "bad address spec [%s]", optarg);
|
||||||
s.defined |= DEF_DST;
|
s.defined |= DEF_DST;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -140,36 +140,36 @@ int main(int argc, char **argv)
|
||||||
struct stat st;
|
struct stat st;
|
||||||
|
|
||||||
if (fstat(STDIN_FILENO, &st) < 0)
|
if (fstat(STDIN_FILENO, &st) < 0)
|
||||||
error(1, errno, "stat stdin, could not determine buffer size");
|
err(1, "stat stdin, could not determine buffer size");
|
||||||
s.pkt_len = st.st_size ?: 1024;
|
s.pkt_len = st.st_size ?: 1024;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* prepare */
|
/* prepare */
|
||||||
buf = malloc(s.pkt_len);
|
buf = malloc(s.pkt_len);
|
||||||
if (!buf)
|
if (!buf)
|
||||||
error(1, errno, "malloc %u", s.pkt_len);
|
err(1, "malloc %u", s.pkt_len);
|
||||||
|
|
||||||
sock = socket(PF_CAN, SOCK_DGRAM, CAN_J1939);
|
sock = socket(PF_CAN, SOCK_DGRAM, CAN_J1939);
|
||||||
if (sock < 0)
|
if (sock < 0)
|
||||||
error(1, errno, "socket(can, dgram, j1939)");
|
err(1, "socket(can, dgram, j1939)");
|
||||||
|
|
||||||
if (s.defined & DEF_PRIO) {
|
if (s.defined & DEF_PRIO) {
|
||||||
ret = setsockopt(sock, SOL_CAN_J1939, SO_J1939_SEND_PRIO, &s.priority, sizeof(s.priority));
|
ret = setsockopt(sock, SOL_CAN_J1939, SO_J1939_SEND_PRIO, &s.priority, sizeof(s.priority));
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
error(1, errno, "setsockopt priority");
|
err(1, "setsockopt priority");
|
||||||
}
|
}
|
||||||
if (s.defined & DEF_SRC) {
|
if (s.defined & DEF_SRC) {
|
||||||
s.src.can_family = AF_CAN;
|
s.src.can_family = AF_CAN;
|
||||||
ret = bind(sock, (void *)&s.src, sizeof(s.src));
|
ret = bind(sock, (void *)&s.src, sizeof(s.src));
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
error(1, errno, "bind(%s), %i", libj1939_addr2str(&s.src), -errno);
|
err(1, "bind(%s), %i", libj1939_addr2str(&s.src), -errno);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (s.defined & DEF_DST) {
|
if (s.defined & DEF_DST) {
|
||||||
s.dst.can_family = AF_CAN;
|
s.dst.can_family = AF_CAN;
|
||||||
ret = connect(sock, (void *)&s.dst, sizeof(s.dst));
|
ret = connect(sock, (void *)&s.dst, sizeof(s.dst));
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
error(1, errno, "connect(%s), %i", libj1939_addr2str(&s.dst), -errno);
|
err(1, "connect(%s), %i", libj1939_addr2str(&s.dst), -errno);
|
||||||
}
|
}
|
||||||
|
|
||||||
pfd[0].fd = STDIN_FILENO;
|
pfd[0].fd = STDIN_FILENO;
|
||||||
|
|
@ -183,27 +183,26 @@ int main(int argc, char **argv)
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
if (errno == EINTR)
|
if (errno == EINTR)
|
||||||
continue;
|
continue;
|
||||||
error(1, errno, "poll()");
|
err(1, "poll()");
|
||||||
}
|
}
|
||||||
if (pfd[0].revents) {
|
if (pfd[0].revents) {
|
||||||
ret = read(pfd[0].fd, buf, s.pkt_len);
|
ret = read(pfd[0].fd, buf, s.pkt_len);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
error(1, errno, "read(stdin)");
|
err(1, "read(stdin)");
|
||||||
if (!ret)
|
if (!ret)
|
||||||
break;
|
break;
|
||||||
len = ret;
|
len = ret;
|
||||||
do {
|
do {
|
||||||
ret = send(pfd[1].fd, buf, len, s.sendflags);
|
ret = send(pfd[1].fd, buf, len, s.sendflags);
|
||||||
if (ret < 0)
|
if (ret < 0 && errno != ENOBUFS)
|
||||||
error(errno != ENOBUFS, errno, "write(%s)",
|
err(1, "write(%s)", libj1939_addr2str(&s.src));
|
||||||
libj1939_addr2str(&s.src));
|
|
||||||
} while (ret < 0);
|
} while (ret < 0);
|
||||||
}
|
}
|
||||||
if (pfd[1].revents) {
|
if (pfd[1].revents) {
|
||||||
ret = read(pfd[1].fd, buf, s.pkt_len);
|
ret = read(pfd[1].fd, buf, s.pkt_len);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
ret = errno;
|
ret = errno;
|
||||||
error(0, errno, "read(%s)", libj1939_addr2str(&s.dst));
|
err(0, "read(%s)", libj1939_addr2str(&s.dst));
|
||||||
switch (ret) {
|
switch (ret) {
|
||||||
case EHOSTDOWN:
|
case EHOSTDOWN:
|
||||||
break;
|
break;
|
||||||
|
|
@ -212,7 +211,7 @@ int main(int argc, char **argv)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (write(STDOUT_FILENO, buf, ret) < 0)
|
if (write(STDOUT_FILENO, buf, ret) < 0)
|
||||||
error(1, errno, "write(stdout)");
|
err(1, "write(stdout)");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,6 @@
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
|
|
||||||
#include <error.h>
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <net/if.h>
|
#include <net/if.h>
|
||||||
|
|
@ -42,7 +41,7 @@ static inline void fetch_names(void)
|
||||||
if (!saved) {
|
if (!saved) {
|
||||||
saved = if_nameindex();
|
saved = if_nameindex();
|
||||||
if (!saved)
|
if (!saved)
|
||||||
error(1, errno, "if_nameindex()");
|
err(1, errno, "if_nameindex()");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
26
testj1939.c
26
testj1939.c
|
|
@ -20,7 +20,7 @@
|
||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
#include <error.h>
|
#include <err.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <net/if.h>
|
#include <net/if.h>
|
||||||
|
|
@ -53,7 +53,7 @@ static const char optstring[] = "?vbos::rep:cnw::";
|
||||||
|
|
||||||
static void onsigalrm(int sig)
|
static void onsigalrm(int sig)
|
||||||
{
|
{
|
||||||
error(0, 0, "exit as requested");
|
err(0, "exit as requested");
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -64,7 +64,7 @@ static void schedule_oneshot_itimer(double delay)
|
||||||
it.it_value.tv_sec = delay;
|
it.it_value.tv_sec = delay;
|
||||||
it.it_value.tv_usec = (long)(delay * 1e6) % 1000000;
|
it.it_value.tv_usec = (long)(delay * 1e6) % 1000000;
|
||||||
if (setitimer(ITIMER_REAL, &it, NULL) < 0)
|
if (setitimer(ITIMER_REAL, &it, NULL) < 0)
|
||||||
error(1, errno, "schedule itimer %.3lfs", delay);
|
err(1, "schedule itimer %.3lfs", delay);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* main */
|
/* main */
|
||||||
|
|
@ -103,7 +103,7 @@ int main(int argc, char *argv[])
|
||||||
case 's':
|
case 's':
|
||||||
todo_send = strtoul(optarg ?: "8", NULL, 0);
|
todo_send = strtoul(optarg ?: "8", NULL, 0);
|
||||||
if (todo_send > sizeof(dat))
|
if (todo_send > sizeof(dat))
|
||||||
error(1, 0, "Unsupported size. max: %zu", sizeof(dat));
|
err(1, "Unsupported size. max: %zu", sizeof(dat));
|
||||||
break;
|
break;
|
||||||
case 'r':
|
case 'r':
|
||||||
todo_recv = 1;
|
todo_recv = 1;
|
||||||
|
|
@ -159,7 +159,7 @@ int main(int argc, char *argv[])
|
||||||
fprintf(stderr, "- socket(PF_CAN, SOCK_DGRAM, CAN_J1939);\n");
|
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)");
|
err(1, "socket(j1939)");
|
||||||
|
|
||||||
if (todo_prio >= 0) {
|
if (todo_prio >= 0) {
|
||||||
if (verbose)
|
if (verbose)
|
||||||
|
|
@ -167,7 +167,7 @@ int main(int argc, char *argv[])
|
||||||
ret = setsockopt(sock, SOL_CAN_J1939, SO_J1939_SEND_PRIO,
|
ret = setsockopt(sock, SOL_CAN_J1939, SO_J1939_SEND_PRIO,
|
||||||
&todo_prio, sizeof(todo_prio));
|
&todo_prio, sizeof(todo_prio));
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
error(1, errno, "set priority %i", todo_prio);
|
err(1, "set priority %i", todo_prio);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!no_bind) {
|
if (!no_bind) {
|
||||||
|
|
@ -176,7 +176,7 @@ int main(int argc, char *argv[])
|
||||||
fprintf(stderr, "- bind(, %s, %zi);\n", libj1939_addr2str(&sockname), sizeof(sockname));
|
fprintf(stderr, "- bind(, %s, %zi);\n", libj1939_addr2str(&sockname), sizeof(sockname));
|
||||||
ret = bind(sock, (void *)&sockname, sizeof(sockname));
|
ret = bind(sock, (void *)&sockname, sizeof(sockname));
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
error(1, errno, "bind()");
|
err(1, "bind()");
|
||||||
|
|
||||||
if (todo_rebind) {
|
if (todo_rebind) {
|
||||||
/* rebind with actual SA */
|
/* rebind with actual SA */
|
||||||
|
|
@ -186,18 +186,18 @@ int main(int argc, char *argv[])
|
||||||
fprintf(stderr, "- bind(, %s, %zi);\n", libj1939_addr2str(&sockname), sizeof(sockname));
|
fprintf(stderr, "- bind(, %s, %zi);\n", libj1939_addr2str(&sockname), sizeof(sockname));
|
||||||
ret = bind(sock, (void *)&sockname, sizeof(sockname));
|
ret = bind(sock, (void *)&sockname, sizeof(sockname));
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
error(1, errno, "re-bind()");
|
err(1, "re-bind()");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (todo_connect) {
|
if (todo_connect) {
|
||||||
if (!valid_peername)
|
if (!valid_peername)
|
||||||
error(1, 0, "no peername supplied");
|
err(1, "no peername supplied");
|
||||||
if (verbose)
|
if (verbose)
|
||||||
fprintf(stderr, "- connect(, %s, %zi);\n", libj1939_addr2str(&peername), sizeof(peername));
|
fprintf(stderr, "- connect(, %s, %zi);\n", libj1939_addr2str(&peername), sizeof(peername));
|
||||||
ret = connect(sock, (void *)&peername, sizeof(peername));
|
ret = connect(sock, (void *)&peername, sizeof(peername));
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
error(1, errno, "connect()");
|
err(1, "connect()");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (todo_send) {
|
if (todo_send) {
|
||||||
|
|
@ -226,7 +226,7 @@ int main(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
error(1, errno, "sendto");
|
err(1, "sendto");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* main loop */
|
/* main loop */
|
||||||
|
|
@ -248,7 +248,7 @@ int main(int argc, char *argv[])
|
||||||
fprintf(stderr, "-\t<interrupted>\n");
|
fprintf(stderr, "-\t<interrupted>\n");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
error(1, errno, "recvfrom()");
|
err(1, "recvfrom()");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (todo_echo) {
|
if (todo_echo) {
|
||||||
|
|
@ -257,7 +257,7 @@ int main(int argc, char *argv[])
|
||||||
ret = sendto(sock, dat, ret, 0,
|
ret = sendto(sock, dat, ret, 0,
|
||||||
(void *)&peername, peernamelen);
|
(void *)&peername, peernamelen);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
error(1, errno, "sendto");
|
err(1, "sendto");
|
||||||
}
|
}
|
||||||
if (todo_recv) {
|
if (todo_recv) {
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue