apps/examples/bridge: Lots of fixes. I think it is working although I have still have host firewall issues in testing

This commit is contained in:
Gregory Nutt 2014-11-21 10:16:19 -06:00
parent 1c28218d7b
commit 0e8992d9ac
6 changed files with 104 additions and 61 deletions

View File

@ -35,12 +35,6 @@ config EXAMPLES_BRIDGE_NET1_RECVPORT
---help---
Network 1 listen port number
config EXAMPLES_BRIDGE_NET1_SNDPORT
int "UDP send port"
default 5472
---help---
Network 2 send port number
config EXAMPLES_BRIDGE_NET1_IOBUFIZE
int "UDP I/O buffer size"
default 1024
@ -93,6 +87,12 @@ config EXAMPLES_BRIDGE_NET1_IPHOST
---help---
IP address of network 1 for the host
config EXAMPLES_BRIDGE_NET1_HOSTPORT
int "Host listen port"
default 5472
---help---
Port number used by the host on network 1
config EXAMPLES_BRIDGE_NET1_STACKSIZE
int "Network 1 daemon stacksize"
default 2048
@ -117,12 +117,6 @@ config EXAMPLES_BRIDGE_NET2_RECVPORT
---help---
Network 1 listen port number
config EXAMPLES_BRIDGE_NET2_SNDPORT
int "UDP send port"
default 5474
---help---
Network 2 send port number
config EXAMPLES_BRIDGE_NET2_IOBUFIZE
int "UDP I/O buffer size"
default 1024
@ -175,6 +169,12 @@ config EXAMPLES_BRIDGE_NET2_IPHOST
---help---
IP address of network 2 for the host
config EXAMPLES_BRIDGE_NET2_HOSTPORT
int "Host listen port"
default 5474
---help---
Port number used by the host on network 2
config EXAMPLES_BRIDGE_NET2_STACKSIZE
int "Network 2 daemon stacksize"
default 2048

View File

@ -105,19 +105,23 @@ $(TARG_COBJS) $(TARG_MAINOBJ): %$(OBJEXT): %.c
$(call COMPILE, $<, $@)
$(HOST_OBJS): %.o: %.c
$(HOSTCC) -c $(HOSTCFLAGS) $< -o $@
@echo "CC: $<"
$(Q) $(HOSTCC) -c $(HOSTCFLAGS) $< -o $@
$(TARG_BIN): $(TARG_OBJS)
$(call ARCHIVE, $(TARG_BIN), $(TARG_OBJS))
bridge_config.h: $(TOPDIR)/include/nuttx/config.h
cp $(TOPDIR)/include/nuttx/config.h bridge_config.h
@echo "CP: brigetconfig.h"
$(Q) cp $(TOPDIR)/include/nuttx/config.h bridge_config.h
$(HOST_BIN1): bridge_config.h $(HOST_OBJS1)
$(HOSTCC) $(HOSTLDFLAGS) $(HOST_OBJS1) -o $@
@echo "LD: $@"
$(Q) $(HOSTCC) $(HOSTLDFLAGS) $(HOST_OBJS1) -o $@
$(HOST_BIN2): bridge_config.h $(HOST_OBJS2)
$(HOSTCC) $(HOSTLDFLAGS) $(HOST_OBJS2) -o $@
@echo "LD: $@"
$(Q) $(HOSTCC) $(HOSTLDFLAGS) $(HOST_OBJS2) -o $@
.built: $(TARG_BIN) $(HOST_BIN1) $(HOST_BIN2)
@touch .built

View File

@ -332,9 +332,10 @@ printf("NET2: Configuring %s\n", CONFIG_EXAMPLES_BRIDGE_NET2_IFNAME);
static int bridge_net1_worker(int argc, char *argv[])
{
struct sockaddr_in recvaddr;
struct sockaddr_in listenaddr;
struct sockaddr_in sendaddr;
struct sockaddr_in receiver;
struct sockaddr_in sender;
struct sockaddr_in fromaddr;
struct sockaddr_in toaddr;
socklen_t addrlen;
in_addr_t tmpaddr;
ssize_t nrecvd;
@ -347,7 +348,11 @@ static int bridge_net1_worker(int argc, char *argv[])
/* Create a UDP receive socket on network 1 */
printf("NET1: Create receive socket\n");
tmpaddr = ntohl(g_net1_ipaddr);
printf("NET1: Create receive socket: %d.%d.%d.%d:%d\n",
tmpaddr >> 24, (tmpaddr >> 16) & 0xff,
(tmpaddr >> 8) & 0xff, tmpaddr & 0xff,
CONFIG_EXAMPLES_BRIDGE_NET1_RECVPORT);
recvsd = socket(PF_INET, SOCK_DGRAM, 0);
if (recvsd < 0)
@ -367,11 +372,11 @@ static int bridge_net1_worker(int argc, char *argv[])
/* Bind the socket to a local address */
listenaddr.sin_family = AF_INET;
listenaddr.sin_port = HTONS(CONFIG_EXAMPLES_BRIDGE_NET1_RECVPORT);
listenaddr.sin_addr.s_addr = g_net1_ipaddr;
receiver.sin_family = AF_INET;
receiver.sin_port = HTONS(CONFIG_EXAMPLES_BRIDGE_NET1_RECVPORT);
receiver.sin_addr.s_addr = g_net1_ipaddr;
if (bind(recvsd, (struct sockaddr*)&listenaddr, sizeof(struct sockaddr_in)) < 0)
if (bind(recvsd, (struct sockaddr*)&receiver, sizeof(struct sockaddr_in)) < 0)
{
fprintf(stderr, "NET1 ERROR: bind failure: %d\n", errno);
goto errout_with_recvsd;
@ -379,7 +384,10 @@ static int bridge_net1_worker(int argc, char *argv[])
/* Create a UDP send socket on network 2 */
printf("NET1: Create send socket\n");
tmpaddr = ntohl(g_net2_ipaddr);
printf("NET1: Create send socket: %d.%d.%d.%d:INPORT_ANY\n",
tmpaddr >> 24, (tmpaddr >> 16) & 0xff,
(tmpaddr >> 8) & 0xff, tmpaddr & 0xff);
sndsd = socket(PF_INET, SOCK_DGRAM, 0);
if (sndsd < 0)
@ -399,11 +407,11 @@ static int bridge_net1_worker(int argc, char *argv[])
/* Bind the socket to a local address */
sendaddr.sin_family = AF_INET;
sendaddr.sin_port = HTONS(CONFIG_EXAMPLES_BRIDGE_NET1_SNDPORT);
sendaddr.sin_addr.s_addr = g_net2_ipaddr;
sender.sin_family = AF_INET;
sender.sin_port = 0;
sender.sin_addr.s_addr = g_net2_ipaddr;
if (bind(sndsd, (struct sockaddr*)&sendaddr, sizeof(struct sockaddr_in)) < 0)
if (bind(sndsd, (struct sockaddr*)&sender, sizeof(struct sockaddr_in)) < 0)
{
printf("NET1: bind failure: %d\n", errno);
goto errout_with_sendsd;
@ -420,14 +428,14 @@ static int bridge_net1_worker(int argc, char *argv[])
addrlen = sizeof(struct sockaddr_in);
nrecvd = recvfrom(recvsd, g_net1_buffer, CONFIG_EXAMPLES_BRIDGE_NET1_IOBUFIZE, 0,
(FAR struct sockaddr*)&recvaddr, &addrlen);
(FAR struct sockaddr*)&fromaddr, &addrlen);
tmpaddr = ntohl(recvaddr.sin_addr.s_addr);
tmpaddr = ntohl(fromaddr.sin_addr.s_addr);
printf("NET1: Received %d bytes from %d.%d.%d.%d:%d\n",
nrecvd,
tmpaddr >> 24, (tmpaddr >> 16) & 0xff,
(tmpaddr >> 8) & 0xff, tmpaddr & 0xff,
ntohs(recvaddr.sin_port));
ntohs(fromaddr.sin_port));
/* Check for a receive error or zero bytes received. The negative
* return value indicates a receive error; Zero would mean that the
@ -452,9 +460,20 @@ static int bridge_net1_worker(int argc, char *argv[])
/* Send the newly received packet out network 2 */
printf("NET1: Sending %d bytes on network 2\n", nrecvd);
printf("NET1: Sending %d bytes on network 2: %d.%d.%d.%d:%d\n",
nrecvd,
CONFIG_EXAMPLES_BRIDGE_NET2_IPHOST >> 24,
(CONFIG_EXAMPLES_BRIDGE_NET2_IPHOST >> 16) & 0xff,
(CONFIG_EXAMPLES_BRIDGE_NET2_IPHOST >> 8) & 0xff,
CONFIG_EXAMPLES_BRIDGE_NET2_IPHOST & 0xff,
CONFIG_EXAMPLES_BRIDGE_NET2_HOSTPORT);
toaddr.sin_family = AF_INET;
toaddr.sin_port = htons(CONFIG_EXAMPLES_BRIDGE_NET2_HOSTPORT);
toaddr.sin_addr.s_addr = htonl(CONFIG_EXAMPLES_BRIDGE_NET2_IPHOST);
nsent = sendto(sndsd, g_net1_buffer, nrecvd, 0,
(struct sockaddr*)&sendaddr, sizeof(struct sockaddr_in));
(struct sockaddr*)&toaddr, sizeof(struct sockaddr_in));
/* Check for send errors */
@ -488,9 +507,10 @@ errout_with_recvsd:
static int bridge_net2_worker(int argc, char *argv[])
{
struct sockaddr_in recvaddr;
struct sockaddr_in listenaddr;
struct sockaddr_in sendaddr;
struct sockaddr_in receiver;
struct sockaddr_in sender;
struct sockaddr_in fromaddr;
struct sockaddr_in toaddr;
socklen_t addrlen;
in_addr_t tmpaddr;
ssize_t nrecvd;
@ -503,7 +523,11 @@ static int bridge_net2_worker(int argc, char *argv[])
/* Create a UDP receive socket on network 2 */
printf("NET2: Create receive socket\n");
tmpaddr = ntohl(g_net2_ipaddr);
printf("NET2: Create receive socket: %d.%d.%d.%d:%d\n",
tmpaddr >> 24, (tmpaddr >> 16) & 0xff,
(tmpaddr >> 8) & 0xff, tmpaddr & 0xff,
CONFIG_EXAMPLES_BRIDGE_NET2_RECVPORT);
recvsd = socket(PF_INET, SOCK_DGRAM, 0);
if (recvsd < 0)
@ -523,11 +547,11 @@ static int bridge_net2_worker(int argc, char *argv[])
/* Bind the socket to a local address */
listenaddr.sin_family = AF_INET;
listenaddr.sin_port = HTONS(CONFIG_EXAMPLES_BRIDGE_NET2_RECVPORT);
listenaddr.sin_addr.s_addr = g_net2_ipaddr;
receiver.sin_family = AF_INET;
receiver.sin_port = HTONS(CONFIG_EXAMPLES_BRIDGE_NET2_RECVPORT);
receiver.sin_addr.s_addr = g_net2_ipaddr;
if (bind(recvsd, (struct sockaddr*)&listenaddr, sizeof(struct sockaddr_in)) < 0)
if (bind(recvsd, (struct sockaddr*)&receiver, sizeof(struct sockaddr_in)) < 0)
{
fprintf(stderr, "NET2 ERROR: bind failure: %d\n", errno);
goto errout_with_recvsd;
@ -535,7 +559,10 @@ static int bridge_net2_worker(int argc, char *argv[])
/* Create a UDP send socket on network 1 */
printf("NET2: Create send socket\n");
tmpaddr = ntohl(g_net1_ipaddr);
printf("NET2: Create send socket: %d.%d.%d.%d:INPORT_ANY\n",
tmpaddr >> 24, (tmpaddr >> 16) & 0xff,
(tmpaddr >> 8) & 0xff, tmpaddr & 0xff);
sndsd = socket(PF_INET, SOCK_DGRAM, 0);
if (sndsd < 0)
@ -555,11 +582,11 @@ static int bridge_net2_worker(int argc, char *argv[])
/* Bind the socket to a local address */
sendaddr.sin_family = AF_INET;
sendaddr.sin_port = HTONS(CONFIG_EXAMPLES_BRIDGE_NET2_SNDPORT);
sendaddr.sin_addr.s_addr = g_net1_ipaddr;
sender.sin_family = AF_INET;
sender.sin_port = 0;
sender.sin_addr.s_addr = g_net1_ipaddr;
if (bind(sndsd, (struct sockaddr*)&sendaddr, sizeof(struct sockaddr_in)) < 0)
if (bind(sndsd, (struct sockaddr*)&sender, sizeof(struct sockaddr_in)) < 0)
{
printf("NET2: bind failure: %d\n", errno);
goto errout_with_sendsd;
@ -576,14 +603,14 @@ static int bridge_net2_worker(int argc, char *argv[])
addrlen = sizeof(struct sockaddr_in);
nrecvd = recvfrom(recvsd, g_net2_buffer, CONFIG_EXAMPLES_BRIDGE_NET2_IOBUFIZE, 0,
(FAR struct sockaddr*)&recvaddr, &addrlen);
(FAR struct sockaddr*)&fromaddr, &addrlen);
tmpaddr = ntohl(recvaddr.sin_addr.s_addr);
tmpaddr = ntohl(fromaddr.sin_addr.s_addr);
printf("NET2: Received %d bytes from %d.%d.%d.%d:%d\n",
nrecvd,
tmpaddr >> 24, (tmpaddr >> 16) & 0xff,
(tmpaddr >> 8) & 0xff, tmpaddr & 0xff,
ntohs(recvaddr.sin_port));
ntohs(fromaddr.sin_port));
/* Check for a receive error or zero bytes received. The negative
* return value indicates a receive error; Zero would mean that the
@ -609,8 +636,20 @@ static int bridge_net2_worker(int argc, char *argv[])
/* Send the newly received packet out network 1 */
printf("NET2: Sending %d bytes on network 1\n", nrecvd);
printf("NET1: Sending %d bytes on network 1: %d.%d.%d.%d:%d\n",
nrecvd,
CONFIG_EXAMPLES_BRIDGE_NET1_IPHOST >> 24,
(CONFIG_EXAMPLES_BRIDGE_NET1_IPHOST >> 16) & 0xff,
(CONFIG_EXAMPLES_BRIDGE_NET1_IPHOST >> 8) & 0xff,
CONFIG_EXAMPLES_BRIDGE_NET1_IPHOST & 0xff,
CONFIG_EXAMPLES_BRIDGE_NET1_HOSTPORT);
toaddr.sin_family = AF_INET;
toaddr.sin_port = htons(CONFIG_EXAMPLES_BRIDGE_NET1_HOSTPORT);
toaddr.sin_addr.s_addr = htonl(CONFIG_EXAMPLES_BRIDGE_NET1_IPHOST);
nsent = sendto(sndsd, g_net2_buffer, nrecvd, 0,
(struct sockaddr*)&sendaddr, sizeof(struct sockaddr_in));
(struct sockaddr*)&toaddr, sizeof(struct sockaddr_in));
/* Check for send errors */

View File

@ -76,8 +76,8 @@ int main(int argc, char *argv[])
{
struct sockaddr_in receiver;
struct sockaddr_in sender;
struct sockaddr_in toaddr;
struct sockaddr_in fromaddr;
struct sockaddr_in toaddr;
socklen_t addrlen;
in_addr_t tmpaddr;
ssize_t nrecvd;
@ -124,7 +124,7 @@ int main(int argc, char *argv[])
/* Create a UDP receive socket */
printf(LABEL "Create receive socket: IPHOST=%08x RECVPORT=%d\n",
EXAMPLES_BRIDGE_RECV_IPHOST, EXAMPLES_BRIDGE_SEND_SNDPORT);
EXAMPLES_BRIDGE_RECV_IPHOST, EXAMPLES_BRIDGE_SEND_HOSTPORT);
recvsd = socket(PF_INET, SOCK_DGRAM, 0);
if (recvsd < 0)
@ -145,7 +145,7 @@ int main(int argc, char *argv[])
/* Bind the socket to a local address */
receiver.sin_family = AF_INET;
receiver.sin_port = htons(EXAMPLES_BRIDGE_SEND_SNDPORT);
receiver.sin_port = htons(EXAMPLES_BRIDGE_SEND_HOSTPORT);
receiver.sin_addr.s_addr = htonl(EXAMPLES_BRIDGE_RECV_IPHOST);
if (bind(recvsd, (struct sockaddr*)&receiver, sizeof(struct sockaddr_in)) < 0)
@ -158,11 +158,11 @@ int main(int argc, char *argv[])
printf(LABEL "Sending %lu bytes: IPTARGET=%08x PORT=%d\n",
sizeof(g_sndmessage),
CONFIG_EXAMPLES_BRIDGE_NET1_IPADDR, CONFIG_EXAMPLES_BRIDGE_NET1_RECVPORT);
EXAMPLES_BRIDGE_RECV_IPADDR, EXAMPLES_BRIDGE_RECV_RECVPORT);
toaddr.sin_family = AF_INET;
toaddr.sin_port = htons(CONFIG_EXAMPLES_BRIDGE_NET1_RECVPORT);
toaddr.sin_addr.s_addr = htonl(CONFIG_EXAMPLES_BRIDGE_NET1_IPADDR);
toaddr.sin_port = htons(EXAMPLES_BRIDGE_RECV_RECVPORT);
toaddr.sin_addr.s_addr = htonl(EXAMPLES_BRIDGE_RECV_IPADDR);
nsent = sendto(sndsd, g_sndmessage, sizeof(g_sndmessage), 0,
(struct sockaddr*)&toaddr, sizeof(struct sockaddr_in));

View File

@ -48,7 +48,6 @@
#define EXAMPLES_BRIDGE_SEND_IFNAME CONFIG_EXAMPLES_BRIDGE_NET1_IFNAME
#define EXAMPLES_BRIDGE_SEND_RECVPORT CONFIG_EXAMPLES_BRIDGE_NET1_RECVPORT
#define EXAMPLES_BRIDGE_SEND_SNDPORT CONFIG_EXAMPLES_BRIDGE_NET1_SNDPORT
#define EXAMPLES_BRIDGE_SEND_IOBUFIZE CONFIG_EXAMPLES_BRIDGE_NET1_IOBUFIZE
#ifdef CONFIG_EXAMPLES_BRIDGE_NET1_NOMAC
# define EXAMPLES_BRIDGE_SEND_NOMAC
@ -58,6 +57,7 @@
#define EXAMPLES_BRIDGE_SEND_DRIPADDR CONFIG_EXAMPLES_BRIDGE_NET1_DRIPADDR
#define EXAMPLES_BRIDGE_SEND_NETMASK CONFIG_EXAMPLES_BRIDGE_NET1_NETMASK
#define EXAMPLES_BRIDGE_SEND_IPHOST CONFIG_EXAMPLES_BRIDGE_NET1_IPHOST
#define EXAMPLES_BRIDGE_SEND_HOSTPORT CONFIG_EXAMPLES_BRIDGE_NET1_HOSTPORT
#define EXAMPLES_BRIDGE_SEND_STACKSIZE CONFIG_EXAMPLES_BRIDGE_NET1_STACKSIZE
#define EXAMPLES_BRIDGE_SEND_PRIORITY CONFIG_EXAMPLES_BRIDGE_NET1_PRIORITY
@ -65,7 +65,6 @@
#define EXAMPLES_BRIDGE_RECV_IFNAME CONFIG_EXAMPLES_BRIDGE_NET2_IFNAME
#define EXAMPLES_BRIDGE_RECV_RECVPORT CONFIG_EXAMPLES_BRIDGE_NET2_RECVPORT
#define EXAMPLES_BRIDGE_RECV_SNDPORT CONFIG_EXAMPLES_BRIDGE_NET2_SNDPORT
#define EXAMPLES_BRIDGE_RECV_IOBUFIZE CONFIG_EXAMPLES_BRIDGE_NET2_IOBUFIZE
#ifdef CONFIG_EXAMPLES_BRIDGE_NET2_NOMAC
# define EXAMPLES_BRIDGE_RECV_NOMAC
@ -75,6 +74,7 @@
#define EXAMPLES_BRIDGE_RECV_DRIPADDR CONFIG_EXAMPLES_BRIDGE_NET2_DRIPADDR
#define EXAMPLES_BRIDGE_RECV_NETMASK CONFIG_EXAMPLES_BRIDGE_NET2_NETMASK
#define EXAMPLES_BRIDGE_RECV_IPHOST CONFIG_EXAMPLES_BRIDGE_NET2_IPHOST
#define EXAMPLES_BRIDGE_RECV_HOSTPORT CONFIG_EXAMPLES_BRIDGE_NET2_HOSTPORT
#define EXAMPLES_BRIDGE_RECV_STACKSIZE CONFIG_EXAMPLES_BRIDGE_NET2_STACKSIZE
#define EXAMPLES_BRIDGE_RECV_PRIORITY CONFIG_EXAMPLES_BRIDGE_NET2_PRIORITY

View File

@ -48,7 +48,6 @@
#define EXAMPLES_BRIDGE_SEND_IFNAME CONFIG_EXAMPLES_BRIDGE_NET2_IFNAME
#define EXAMPLES_BRIDGE_SEND_RECVPORT CONFIG_EXAMPLES_BRIDGE_NET2_RECVPORT
#define EXAMPLES_BRIDGE_SEND_SNDPORT CONFIG_EXAMPLES_BRIDGE_NET2_SNDPORT
#define EXAMPLES_BRIDGE_SEND_IOBUFIZE CONFIG_EXAMPLES_BRIDGE_NET2_IOBUFIZE
#ifdef CONFIG_EXAMPLES_BRIDGE_NET2_NOMAC
# define EXAMPLES_BRIDGE_SEND_NOMAC
@ -58,6 +57,7 @@
#define EXAMPLES_BRIDGE_SEND_DRIPADDR CONFIG_EXAMPLES_BRIDGE_NET2_DRIPADDR
#define EXAMPLES_BRIDGE_SEND_NETMASK CONFIG_EXAMPLES_BRIDGE_NET2_NETMASK
#define EXAMPLES_BRIDGE_SEND_IPHOST CONFIG_EXAMPLES_BRIDGE_NET2_IPHOST
#define EXAMPLES_BRIDGE_SEND_HOSTPORT CONFIG_EXAMPLES_BRIDGE_NET2_HOSTPORT
#define EXAMPLES_BRIDGE_SEND_STACKSIZE CONFIG_EXAMPLES_BRIDGE_NET2_STACKSIZE
#define EXAMPLES_BRIDGE_SEND_PRIORITY CONFIG_EXAMPLES_BRIDGE_NET2_PRIORITY
@ -65,7 +65,6 @@
#define EXAMPLES_BRIDGE_RECV_IFNAME CONFIG_EXAMPLES_BRIDGE_NET1_IFNAME
#define EXAMPLES_BRIDGE_RECV_RECVPORT CONFIG_EXAMPLES_BRIDGE_NET1_RECVPORT
#define EXAMPLES_BRIDGE_RECV_SNDPORT CONFIG_EXAMPLES_BRIDGE_NET1_SNDPORT
#define EXAMPLES_BRIDGE_RECV_IOBUFIZE CONFIG_EXAMPLES_BRIDGE_NET1_IOBUFIZE
#ifdef CONFIG_EXAMPLES_BRIDGE_NET1_NOMAC
# define EXAMPLES_BRIDGE_RECV_NOMAC
@ -75,6 +74,7 @@
#define EXAMPLES_BRIDGE_RECV_DRIPADDR CONFIG_EXAMPLES_BRIDGE_NET1_DRIPADDR
#define EXAMPLES_BRIDGE_RECV_NETMASK CONFIG_EXAMPLES_BRIDGE_NET1_NETMASK
#define EXAMPLES_BRIDGE_RECV_IPHOST CONFIG_EXAMPLES_BRIDGE_NET1_IPHOST
#define EXAMPLES_BRIDGE_RECV_HOSTPORT CONFIG_EXAMPLES_BRIDGE_NET1_HOSTPORT
#define EXAMPLES_BRIDGE_RECV_STACKSIZE CONFIG_EXAMPLES_BRIDGE_NET1_STACKSIZE
#define EXAMPLES_BRIDGE_RECV_PRIORITY CONFIG_EXAMPLES_BRIDGE_NET1_PRIORITY