if (silent == SILENT_INI) {
if (log) {
- fprintf(stderr, "\nDisabled standard output while logging.");
+ fprintf(stderr, "Disabled standard output while logging.\n");
silent = SILENT_ON; /* disable output on stdout */
} else
silent = SILENT_OFF; /* default output */
ptr = nptr+1; /* hop behind the ',' */
nptr = strchr(ptr, ','); /* update exit condition */
- if (sscanf(ptr, "%lx:%lx",
- (long unsigned int *)
+ if (sscanf(ptr, "%x:%x",
&rfilter[numfilter].can_id,
- (long unsigned int *)
&rfilter[numfilter].can_mask) == 2) {
rfilter[numfilter].can_mask &= ~CAN_ERR_FLAG;
numfilter++;
- } else if (sscanf(ptr, "%lx~%lx",
- (long unsigned int *)
+ } else if (sscanf(ptr, "%x~%x",
&rfilter[numfilter].can_id,
- (long unsigned int *)
&rfilter[numfilter].can_mask) == 2) {
rfilter[numfilter].can_id |= CAN_INV_FILTER;
rfilter[numfilter].can_mask &= ~CAN_ERR_FLAG;
numfilter++;
- } else if (sscanf(ptr, "#%lx",
- (long unsigned int *)&err_mask) != 1) {
+ } else if (sscanf(ptr, "#%x", &err_mask) != 1) {
fprintf(stderr, "Error in filter option parsing: '%s'\n", ptr);
return 1;
}
int curr_rcvbuf_size;
socklen_t curr_rcvbuf_size_len = sizeof(curr_rcvbuf_size);
- if (setsockopt(s[i], SOL_SOCKET, SO_RCVBUF,
+ /* try SO_RCVBUFFORCE first, if we run with CAP_NET_ADMIN */
+ if (setsockopt(s[i], SOL_SOCKET, SO_RCVBUFFORCE,
&rcvbuf_size, sizeof(rcvbuf_size)) < 0) {
- perror("setsockopt SO_RCVBUF");
- return 1;
- }
+#ifdef DEBUG
+ printf("SO_RCVBUFFORCE failed so try SO_RCVBUF ...\n");
+#endif
+ if (setsockopt(s[i], SOL_SOCKET, SO_RCVBUF,
+ &rcvbuf_size, sizeof(rcvbuf_size)) < 0) {
+ perror("setsockopt SO_RCVBUF");
+ return 1;
+ }
- if (getsockopt(s[i], SOL_SOCKET, SO_RCVBUF,
- &curr_rcvbuf_size, &curr_rcvbuf_size_len) < 0) {
- perror("getsockopt SO_RCVBUF");
- return 1;
- }
+ if (getsockopt(s[i], SOL_SOCKET, SO_RCVBUF,
+ &curr_rcvbuf_size, &curr_rcvbuf_size_len) < 0) {
+ perror("getsockopt SO_RCVBUF");
+ return 1;
+ }
- /* Only print a warning the first time we detect the adjustment */
- /* n.b.: The wanted size is doubled in Linux in net/sore/sock.c */
- if (!i && curr_rcvbuf_size < rcvbuf_size*2)
- fprintf(stderr, "The socket receive buffer size was "
- "adjusted due to /proc/sys/net/core/rmem_max.\n");
+ /* Only print a warning the first time we detect the adjustment */
+ /* n.b.: The wanted size is doubled in Linux in net/sore/sock.c */
+ if (!i && curr_rcvbuf_size < rcvbuf_size*2)
+ fprintf(stderr, "The socket receive buffer size was "
+ "adjusted due to /proc/sys/net/core/rmem_max.\n");
+ }
}
if (timestamp || log || logfrmt) {