From 07338ff2a9b84e1ab752c681bc7b9a35851ef423 Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Thu, 6 Apr 2017 11:58:55 -0600 Subject: [PATCH] examples/udpblaster: Add logic to bind the local UDP socket to a well-known address. --- examples/udpblaster/udpblaster.h | 8 +++- examples/udpblaster/udpblaster_host.c | 4 +- examples/udpblaster/udpblaster_target.c | 59 ++++++++++++++++++------- 3 files changed, 53 insertions(+), 18 deletions(-) diff --git a/examples/udpblaster/udpblaster.h b/examples/udpblaster/udpblaster.h index fdfe1b7d8..8ae5cad5e 100644 --- a/examples/udpblaster/udpblaster.h +++ b/examples/udpblaster/udpblaster.h @@ -74,7 +74,13 @@ # define PF_INETX PF_INET #endif -#define UDPBLASTER_PORTNO 5471 +#ifdef CONFIG_NET_6LOWPAN +# define UDPBLASTER_HOST_PORTNO 0xf0b0 +# define UDPBLASTER_TARGET_PORTNO 0xf0b1 +#else +# define UDPBLASTER_HOST_PORTNO 5471 +# define UDPBLASTER_TARGET_PORTNO 5472 +#endif #define ETH_HDRLEN 14 /* Size of the Ethernet header */ #define IPv4_HDRLEN 20 /* Size of IPv4 header */ diff --git a/examples/udpblaster/udpblaster_host.c b/examples/udpblaster/udpblaster_host.c index 11562d84d..67f3067d4 100644 --- a/examples/udpblaster/udpblaster_host.c +++ b/examples/udpblaster/udpblaster_host.c @@ -69,7 +69,7 @@ int main(int argc, char **argv, char **envp) #ifdef CONFIG_EXAMPLES_UDPBLASTER_IPv4 target.sin_family = AF_INET; - target.sin_port = HTONS(UDPBLASTER_PORTNO); + target.sin_port = HTONS(UDPBLASTER_TARGET_PORTNO); target.sin_addr.s_addr = HTONL(CONFIG_EXAMPLES_UDPBLASTER_TARGETIP); addrlen = sizeof(struct sockaddr_in); @@ -82,7 +82,7 @@ int main(int argc, char **argv, char **envp) #else target.sin6_family = AF_INET6; - target.sin6_port = HTONS(UDPBLASTER_PORTNO); + target.sin6_port = HTONS(UDPBLASTER_TARGET_PORTNO); target.sin6_addr.s6_addr16[0] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_TARGETIPv6_1); target.sin6_addr.s6_addr16[1] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_TARGETIPv6_2); target.sin6_addr.s6_addr16[2] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_TARGETIPv6_3); diff --git a/examples/udpblaster/udpblaster_target.c b/examples/udpblaster/udpblaster_target.c index afbb1b51b..7f0e286ba 100644 --- a/examples/udpblaster/udpblaster_target.c +++ b/examples/udpblaster/udpblaster_target.c @@ -192,8 +192,10 @@ int udpblaster_main(int argc, char *argv[]) { #ifdef CONFIG_EXAMPLES_UDPBLASTER_IPv4 struct sockaddr_in host; + struct sockaddr_in target; #else struct sockaddr_in6 host; + struct sockaddr_in6 target; #endif socklen_t addrlen; int npackets; @@ -209,10 +211,9 @@ int udpblaster_main(int argc, char *argv[]) #ifdef CONFIG_EXAMPLES_UDPBLASTER_IPv4 host.sin_family = AF_INET; - host.sin_port = HTONS(UDPBLASTER_PORTNO); + host.sin_port = HTONS(UDPBLASTER_HOST_PORTNO); host.sin_addr.s_addr = HTONL(CONFIG_EXAMPLES_UDPBLASTER_HOSTIP); - addrlen = sizeof(struct sockaddr_in); sockfd = socket(PF_INET, SOCK_DGRAM, 0); if (sockfd < 0) { @@ -220,25 +221,53 @@ int udpblaster_main(int argc, char *argv[]) return 1; } -#else - host.sin6_family = AF_INET6; - host.sin6_port = HTONS(UDPBLASTER_PORTNO); - host.sin6_addr.s6_addr16[0] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_HOSTIPv6_1); - host.sin6_addr.s6_addr16[1] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_HOSTIPv6_2); - host.sin6_addr.s6_addr16[2] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_HOSTIPv6_3); - host.sin6_addr.s6_addr16[3] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_HOSTIPv6_4); - host.sin6_addr.s6_addr16[4] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_HOSTIPv6_5); - host.sin6_addr.s6_addr16[5] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_HOSTIPv6_6); - host.sin6_addr.s6_addr16[6] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_HOSTIPv6_7); - host.sin6_addr.s6_addr16[7] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_HOSTIPv6_8); + target.sin_family = AF_INET; + target.sin_port = HTONS(UDPBLASTER_TARGET_PORTNO); + target.sin_addr.s_addr = HTONL(CONFIG_EXAMPLES_UDPBLASTER_TARGETIP); + addrlen = sizeof(struct sockaddr_in); - addrlen = sizeof(struct sockaddr_in6); - sockfd = socket(PF_INET6, SOCK_DGRAM, 0); + if (bind(sockfd, (struct sockaddr*)&target, addrlen) < 0) + { + printf("server: ERROR bind failure: %d\n", errno); + return 1; + } + +#else + host.sin6_family = AF_INET6; + host.sin6_port = HTONS(UDPBLASTER_HOST_PORTNO); + host.sin6_addr.s6_addr16[0] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_HOSTIPv6_1); + host.sin6_addr.s6_addr16[1] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_HOSTIPv6_2); + host.sin6_addr.s6_addr16[2] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_HOSTIPv6_3); + host.sin6_addr.s6_addr16[3] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_HOSTIPv6_4); + host.sin6_addr.s6_addr16[4] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_HOSTIPv6_5); + host.sin6_addr.s6_addr16[5] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_HOSTIPv6_6); + host.sin6_addr.s6_addr16[6] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_HOSTIPv6_7); + host.sin6_addr.s6_addr16[7] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_HOSTIPv6_8); + + sockfd = socket(PF_INET6, SOCK_DGRAM, 0); if (sockfd < 0) { fprintf(stderr, "ERROR: socket() failed: %d\n", errno); return 1; } + + target.sin6_family = AF_INET6; + target.sin6_port = HTONS(UDPBLASTER_TARGET_PORTNO); + target.sin6_addr.s6_addr16[0] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_TARGETIPv6_1); + target.sin6_addr.s6_addr16[1] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_TARGETIPv6_2); + target.sin6_addr.s6_addr16[2] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_TARGETIPv6_3); + target.sin6_addr.s6_addr16[3] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_TARGETIPv6_4); + target.sin6_addr.s6_addr16[4] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_TARGETIPv6_5); + target.sin6_addr.s6_addr16[5] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_TARGETIPv6_6); + target.sin6_addr.s6_addr16[6] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_TARGETIPv6_7); + target.sin6_addr.s6_addr16[7] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_TARGETIPv6_8); + addrlen = sizeof(struct sockaddr_in6); + + if (bind(sockfd, (struct sockaddr*)&target, addrlen) < 0) + { + printf("server: ERROR bind failure: %d\n", errno); + return 1; + } #endif npackets = 0;