diff --git a/src/beacon.c b/src/beacon.c index 53b8bed..99c719c 100644 --- a/src/beacon.c +++ b/src/beacon.c @@ -54,7 +54,7 @@ void *beacon_loop(void *ptr) } chars_left = BEACON_LENGTH - n; - snprintf(buffer + (n * sizeof(char)), chars_left, "", interface_names[i]); + snprintf(buffer + (n * sizeof(char)), chars_left, "", bus_names[i]); } /* Find \0 in beacon buffer */ diff --git a/src/socketcand.c b/src/socketcand.c index f481d11..0714f50 100644 --- a/src/socketcand.c +++ b/src/socketcand.c @@ -50,6 +50,7 @@ int receive_command(int socket, char *buf); int sl, client_socket; pthread_t beacon_thread, statistics_thread; char **interface_names; +char **bus_names; int interface_count = 0; int port; int verbose_flag = 0; @@ -300,6 +301,16 @@ int main(int argc, char **argv) interface_names[i] = strtok(NULL, ","); } + /* check if any of the intefaces requires a different bus name */ + bus_names = malloc(sizeof(char *) * interface_count); + for (i = 0; i < interface_count; i++) { + strtok(interface_names[i], "="); /* split at the = if it's there */ + bus_names[i] = strtok(NULL, "="); + if (bus_names[i] == NULL) { + bus_names[i] = interface_names[i]; + } + } + /* if daemon mode was activated the syslog must be opened */ if (daemon_flag) { openlog("socketcand", 0, LOG_DAEMON); @@ -645,7 +656,7 @@ void print_usage(void) printf("Usage: socketcand [-v | --verbose] [-i interfaces | --interfaces interfaces]\n\t\t[-p port | --port port] [-q | --quick-ack]\n\t\t[-l interface | --listen interface] [-u name | --afuxname name]\n\t\t[-n | --no-beacon] [-d | --daemon] [-h | --help]\n\n"); printf("Options:\n"); printf("\t-v (activates verbose output to STDOUT)\n"); - printf("\t-i (comma separated list of SocketCAN interfaces the daemon\n\t\tshall provide access to e.g. '-i can0,vcan1' - default: %s)\n", DEFAULT_BUSNAME); + printf("\t-i [=] (comma separated list of SocketCAN interfaces the daemon\n\t\tshall provide access to e.g. '-i can0,vcan1'\n\t\tmight include an optional bus name,\n\t\tif different from interface e.g. '-i vcan0=mybus' - default: %s)\n", DEFAULT_BUSNAME); printf("\t-p (changes the default port '%d' the daemon is listening at)\n", PORT); printf("\t-q (enable TCP_QUICKACK socket option)\n"); printf("\t-l (changes the default network interface the daemon will\n\t\tbind to - default: %s)\n", DEFAULT_INTERFACE); diff --git a/src/socketcand.h b/src/socketcand.h index 5747fcf..0fad737 100644 --- a/src/socketcand.h +++ b/src/socketcand.h @@ -56,6 +56,7 @@ void state_nobus(); extern int client_socket; extern char **interface_names; +extern char **bus_names; extern int interface_count; extern int port; extern int verbose_flag; @@ -74,4 +75,4 @@ int receive_command(int socket, char *buf); int state_changed(char *buf, int current_state); char *element_start(char *buf, int element); int element_length(char *buf, int element); -int asc2nibble(char c); \ No newline at end of file +int asc2nibble(char c); diff --git a/src/state_nobus.c b/src/state_nobus.c index 70a12d5..a917b34 100644 --- a/src/state_nobus.c +++ b/src/state_nobus.c @@ -8,13 +8,15 @@ #include #include -static int check_bus(const char *bus_name) +static int check_bus(char *bus_name) { int found = 0, i; for (i = 0; i < interface_count; i++) { - if (!strcmp(interface_names[i], bus_name)) + if (!strcmp(bus_names[i], bus_name)) { + strcpy(bus_name, interface_names[i]); found = 1; + } } return found; }