Loading Makefile +1 −1 Original line number Diff line number Diff line Loading @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=its_bridge PKG_REFV:=2 PKG_VERSION:=0.0.1 PKG_VERSION:=0.0.12 PKG_RELEASE:=1 include $(INCLUDE_DIR)/package.mk Loading src/its_bridge_server.c +29 −30 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ void sig_usr1_handler(int p_signal) { } int main(const int32_t p_argc, char* const p_argv[]) { fprintf(stderr, ">>> Version 12.\n"); /* Sanity check */ uid_t uid = getuid(); if (geteuid() != uid) { Loading Loading @@ -136,27 +137,33 @@ int main(const int32_t p_argc, char* const p_argv[]) { fprintf(stderr, "Failed to create UDP socket: %s.\n", strerror(errno)); goto error; } /* allow multiple instances to receive copies of the multicast datagrams */ /* Allow multiple instances to receive copies of the multicast datagrams */ int32_t flags = 1; if (setsockopt(socket_hd, SOL_SOCKET, SO_REUSEADDR, (char *)&flags, sizeof(flags)) < 0) { fprintf(stderr, "Failed to set SO_REUSEADDR option: %s.\n", strerror(errno)); close(socket_hd); goto error; } /* Bind it to the specified NIC Ethernet */ /* Get interface address */ memset(&ifr, 0, sizeof(ifr)); ifr.ifr_addr.sa_family = AF_INET; snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), "%s", udp_nic); #ifndef __APPLE__ /* FIXME To test if (setsockopt(socket_hd, SOL_SOCKET, SO_BINDTODEVICE, (void *)&ifr.ifr_name, strlen(ifr.ifr_name)) < 0) { fprintf(stderr, "Failed to bind to interface:%s.\n", strerror(errno)); if (ioctl(socket_hd, SIOCGIFADDR, &ifr) < 0) { fprintf(stderr, "Failed to get interface address for %s.\n", ifr.ifr_name); close(socket_hd); goto error; } printf("Interface address for %s: %s\n", ifr.ifr_name, inet_ntoa(((struct sockaddr_in*)&ifr.ifr_addr)->sin_addr)); /* Bind it to the specified NIC Ethernet */ struct sockaddr_in server_addr = {0}; server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = htonl(INADDR_ANY);//inet_addr(inet_ntoa(((struct sockaddr_in*)&ifr.ifr_addr)->sin_addr)); server_addr.sin_port = htons(udp_port); if (bind(socket_hd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) { fprintf(stderr, "Failed to bind UDP broadcast socket: %s.\n", strerror(errno)); close(socket_hd); goto error; } printf("Bound to device %s.\n", ifr.ifr_name); */ #endif /* Configure the udp_port and ip we want to receive from */ if (udp_protocol != NULL) { if (strcmp(udp_protocol, "broadcast") == 0) { Loading @@ -167,20 +174,21 @@ int main(const int32_t p_argc, char* const p_argv[]) { goto error; } } else if (strcmp(udp_protocol, "multicast") == 0) { /* Get interface address */ if (ioctl(socket_hd, SIOCGIFADDR, &ifr) < 0) { fprintf(stderr, "Failed to get interface address for %s.\n", ifr.ifr_name); #ifndef __APPLE__ if (setsockopt(socket_hd, SOL_SOCKET, SO_BINDTODEVICE, (void *)&ifr.ifr_name, strlen(ifr.ifr_name)) < 0) { fprintf(stderr, "Failed to bind to interface:%s.\n", strerror(errno)); close(socket_hd); goto error; } printf("Interface address for %s: %s\n", ifr.ifr_name, inet_ntoa(((struct sockaddr_in*)&ifr.ifr_addr)->sin_addr)); printf("Bound to device %s.\n", ifr.ifr_name); #endif /* Join the multicast group */ mreq = (struct ip_mreq**)malloc(num_addresses * sizeof(struct ip_mreq*)); memset((void*)mreq, 0x00, num_addresses * sizeof(struct ip_mreq*)); for (size_t i = 0; i < num_addresses; i++) { struct ip_mreq* mr = (struct ip_mreq*)malloc(sizeof(struct ip_mreq)); *(mreq + i) = mr; mr->imr_interface.s_addr = inet_addr(inet_ntoa(((struct sockaddr_in*)&ifr.ifr_addr)->sin_addr)); /* Local address */ mr->imr_interface.s_addr = htonl(INADDR_ANY);//inet_addr(inet_ntoa(((struct sockaddr_in*)&ifr.ifr_addr)->sin_addr)); /* Local address */ mr->imr_multiaddr.s_addr = inet_addr(*(udp_addresses + i)); /* IP multicast address of group */ printf("mreq.imr_interface.s_addr = %s.\n", inet_ntoa(mr->imr_interface)); printf("mreq.imr_multiaddr.s_addr = %s.\n", inet_ntoa(mr->imr_multiaddr)); Loading @@ -202,21 +210,12 @@ int main(const int32_t p_argc, char* const p_argv[]) { } else { /* Unicast */ /* Nothing to do */ } /* Configure the port and ip we want to send to */ struct sockaddr_in server_addr = {0}; server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = INADDR_ANY; server_addr.sin_port = htons(udp_port); if (bind(socket_hd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) { fprintf(stderr, "Failed to bind UDP broadcast socket: %s.\n", strerror(errno)); close(socket_hd); goto error; } /* Start listening */ running = true; uint8_t buffer[MAX_BUFFER_SIZE]; int32_t addr_len; struct sockaddr_in addr; struct sockaddr_in addr = {0}; int32_t addr_len = sizeof(addr); printf("Entering 'while' loop: state=%d.\n", state); while (running == true) { result = recvfrom(socket_hd, buffer, MAX_BUFFER_SIZE, 0, (struct sockaddr*)&addr, &addr_len); if (result < 0) { Loading Loading
Makefile +1 −1 Original line number Diff line number Diff line Loading @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=its_bridge PKG_REFV:=2 PKG_VERSION:=0.0.1 PKG_VERSION:=0.0.12 PKG_RELEASE:=1 include $(INCLUDE_DIR)/package.mk Loading
src/its_bridge_server.c +29 −30 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ void sig_usr1_handler(int p_signal) { } int main(const int32_t p_argc, char* const p_argv[]) { fprintf(stderr, ">>> Version 12.\n"); /* Sanity check */ uid_t uid = getuid(); if (geteuid() != uid) { Loading Loading @@ -136,27 +137,33 @@ int main(const int32_t p_argc, char* const p_argv[]) { fprintf(stderr, "Failed to create UDP socket: %s.\n", strerror(errno)); goto error; } /* allow multiple instances to receive copies of the multicast datagrams */ /* Allow multiple instances to receive copies of the multicast datagrams */ int32_t flags = 1; if (setsockopt(socket_hd, SOL_SOCKET, SO_REUSEADDR, (char *)&flags, sizeof(flags)) < 0) { fprintf(stderr, "Failed to set SO_REUSEADDR option: %s.\n", strerror(errno)); close(socket_hd); goto error; } /* Bind it to the specified NIC Ethernet */ /* Get interface address */ memset(&ifr, 0, sizeof(ifr)); ifr.ifr_addr.sa_family = AF_INET; snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), "%s", udp_nic); #ifndef __APPLE__ /* FIXME To test if (setsockopt(socket_hd, SOL_SOCKET, SO_BINDTODEVICE, (void *)&ifr.ifr_name, strlen(ifr.ifr_name)) < 0) { fprintf(stderr, "Failed to bind to interface:%s.\n", strerror(errno)); if (ioctl(socket_hd, SIOCGIFADDR, &ifr) < 0) { fprintf(stderr, "Failed to get interface address for %s.\n", ifr.ifr_name); close(socket_hd); goto error; } printf("Interface address for %s: %s\n", ifr.ifr_name, inet_ntoa(((struct sockaddr_in*)&ifr.ifr_addr)->sin_addr)); /* Bind it to the specified NIC Ethernet */ struct sockaddr_in server_addr = {0}; server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = htonl(INADDR_ANY);//inet_addr(inet_ntoa(((struct sockaddr_in*)&ifr.ifr_addr)->sin_addr)); server_addr.sin_port = htons(udp_port); if (bind(socket_hd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) { fprintf(stderr, "Failed to bind UDP broadcast socket: %s.\n", strerror(errno)); close(socket_hd); goto error; } printf("Bound to device %s.\n", ifr.ifr_name); */ #endif /* Configure the udp_port and ip we want to receive from */ if (udp_protocol != NULL) { if (strcmp(udp_protocol, "broadcast") == 0) { Loading @@ -167,20 +174,21 @@ int main(const int32_t p_argc, char* const p_argv[]) { goto error; } } else if (strcmp(udp_protocol, "multicast") == 0) { /* Get interface address */ if (ioctl(socket_hd, SIOCGIFADDR, &ifr) < 0) { fprintf(stderr, "Failed to get interface address for %s.\n", ifr.ifr_name); #ifndef __APPLE__ if (setsockopt(socket_hd, SOL_SOCKET, SO_BINDTODEVICE, (void *)&ifr.ifr_name, strlen(ifr.ifr_name)) < 0) { fprintf(stderr, "Failed to bind to interface:%s.\n", strerror(errno)); close(socket_hd); goto error; } printf("Interface address for %s: %s\n", ifr.ifr_name, inet_ntoa(((struct sockaddr_in*)&ifr.ifr_addr)->sin_addr)); printf("Bound to device %s.\n", ifr.ifr_name); #endif /* Join the multicast group */ mreq = (struct ip_mreq**)malloc(num_addresses * sizeof(struct ip_mreq*)); memset((void*)mreq, 0x00, num_addresses * sizeof(struct ip_mreq*)); for (size_t i = 0; i < num_addresses; i++) { struct ip_mreq* mr = (struct ip_mreq*)malloc(sizeof(struct ip_mreq)); *(mreq + i) = mr; mr->imr_interface.s_addr = inet_addr(inet_ntoa(((struct sockaddr_in*)&ifr.ifr_addr)->sin_addr)); /* Local address */ mr->imr_interface.s_addr = htonl(INADDR_ANY);//inet_addr(inet_ntoa(((struct sockaddr_in*)&ifr.ifr_addr)->sin_addr)); /* Local address */ mr->imr_multiaddr.s_addr = inet_addr(*(udp_addresses + i)); /* IP multicast address of group */ printf("mreq.imr_interface.s_addr = %s.\n", inet_ntoa(mr->imr_interface)); printf("mreq.imr_multiaddr.s_addr = %s.\n", inet_ntoa(mr->imr_multiaddr)); Loading @@ -202,21 +210,12 @@ int main(const int32_t p_argc, char* const p_argv[]) { } else { /* Unicast */ /* Nothing to do */ } /* Configure the port and ip we want to send to */ struct sockaddr_in server_addr = {0}; server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = INADDR_ANY; server_addr.sin_port = htons(udp_port); if (bind(socket_hd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) { fprintf(stderr, "Failed to bind UDP broadcast socket: %s.\n", strerror(errno)); close(socket_hd); goto error; } /* Start listening */ running = true; uint8_t buffer[MAX_BUFFER_SIZE]; int32_t addr_len; struct sockaddr_in addr; struct sockaddr_in addr = {0}; int32_t addr_len = sizeof(addr); printf("Entering 'while' loop: state=%d.\n", state); while (running == true) { result = recvfrom(socket_hd, buffer, MAX_BUFFER_SIZE, 0, (struct sockaddr*)&addr, &addr_len); if (result < 0) { Loading