examples/udpblaster: Add logic to bind the local UDP socket to a well-known address.

This commit is contained in:
Gregory Nutt 2017-04-06 11:58:55 -06:00
parent 14fc6d7575
commit 07338ff2a9
3 changed files with 53 additions and 18 deletions

View File

@ -74,7 +74,13 @@
# define PF_INETX PF_INET # define PF_INETX PF_INET
#endif #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 ETH_HDRLEN 14 /* Size of the Ethernet header */
#define IPv4_HDRLEN 20 /* Size of IPv4 header */ #define IPv4_HDRLEN 20 /* Size of IPv4 header */

View File

@ -69,7 +69,7 @@ int main(int argc, char **argv, char **envp)
#ifdef CONFIG_EXAMPLES_UDPBLASTER_IPv4 #ifdef CONFIG_EXAMPLES_UDPBLASTER_IPv4
target.sin_family = AF_INET; 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); target.sin_addr.s_addr = HTONL(CONFIG_EXAMPLES_UDPBLASTER_TARGETIP);
addrlen = sizeof(struct sockaddr_in); addrlen = sizeof(struct sockaddr_in);
@ -82,7 +82,7 @@ int main(int argc, char **argv, char **envp)
#else #else
target.sin6_family = AF_INET6; 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[0] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_TARGETIPv6_1);
target.sin6_addr.s6_addr16[1] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_TARGETIPv6_2); 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[2] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_TARGETIPv6_3);

View File

@ -192,8 +192,10 @@ int udpblaster_main(int argc, char *argv[])
{ {
#ifdef CONFIG_EXAMPLES_UDPBLASTER_IPv4 #ifdef CONFIG_EXAMPLES_UDPBLASTER_IPv4
struct sockaddr_in host; struct sockaddr_in host;
struct sockaddr_in target;
#else #else
struct sockaddr_in6 host; struct sockaddr_in6 host;
struct sockaddr_in6 target;
#endif #endif
socklen_t addrlen; socklen_t addrlen;
int npackets; int npackets;
@ -209,10 +211,9 @@ int udpblaster_main(int argc, char *argv[])
#ifdef CONFIG_EXAMPLES_UDPBLASTER_IPv4 #ifdef CONFIG_EXAMPLES_UDPBLASTER_IPv4
host.sin_family = AF_INET; 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); host.sin_addr.s_addr = HTONL(CONFIG_EXAMPLES_UDPBLASTER_HOSTIP);
addrlen = sizeof(struct sockaddr_in);
sockfd = socket(PF_INET, SOCK_DGRAM, 0); sockfd = socket(PF_INET, SOCK_DGRAM, 0);
if (sockfd < 0) if (sockfd < 0)
{ {
@ -220,25 +221,53 @@ int udpblaster_main(int argc, char *argv[])
return 1; return 1;
} }
#else target.sin_family = AF_INET;
host.sin6_family = AF_INET6; target.sin_port = HTONS(UDPBLASTER_TARGET_PORTNO);
host.sin6_port = HTONS(UDPBLASTER_PORTNO); target.sin_addr.s_addr = HTONL(CONFIG_EXAMPLES_UDPBLASTER_TARGETIP);
host.sin6_addr.s6_addr16[0] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_HOSTIPv6_1); addrlen = sizeof(struct sockaddr_in);
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);
addrlen = sizeof(struct sockaddr_in6); if (bind(sockfd, (struct sockaddr*)&target, addrlen) < 0)
sockfd = socket(PF_INET6, SOCK_DGRAM, 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) if (sockfd < 0)
{ {
fprintf(stderr, "ERROR: socket() failed: %d\n", errno); fprintf(stderr, "ERROR: socket() failed: %d\n", errno);
return 1; 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 #endif
npackets = 0; npackets = 0;