examples/udp: Port numbers need to be configurable to work with 6LoWPAN. Need to bind the client socket to a port number. This was not required before so is a apparently a change in the UDP packet dispatch logic.
This commit is contained in:
parent
d5a897fa1b
commit
c0286c1276
@ -511,4 +511,13 @@ config EXAMPLES_UDP_SERVERIPv6ADDR_8
|
|||||||
This is the last of the 8-values.
|
This is the last of the 8-values.
|
||||||
|
|
||||||
endif # EXAMPLES_UDP_IPv6
|
endif # EXAMPLES_UDP_IPv6
|
||||||
|
|
||||||
|
config EXAMPLES_SERVER_PORTNO
|
||||||
|
int "Server port number"
|
||||||
|
default 5471
|
||||||
|
|
||||||
|
config EXAMPLES_CLIENT_PORTNO
|
||||||
|
int "Client port number"
|
||||||
|
default 5472
|
||||||
|
|
||||||
endif # EXAMPLES_UDP
|
endif # EXAMPLES_UDP
|
||||||
|
@ -83,7 +83,13 @@
|
|||||||
# define PF_INETX PF_INET
|
# define PF_INETX PF_INET
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define PORTNO 5471
|
#ifndef CONFIG_EXAMPLES_SERVER_PORTNO
|
||||||
|
# define CONFIG_EXAMPLES_SERVER_PORTNO 5471
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef CONFIG_EXAMPLES_CLIENT_PORTNO
|
||||||
|
# define CONFIG_EXAMPLES_CLIENT_PORTNO 5472
|
||||||
|
#endif
|
||||||
|
|
||||||
#define ASCIISIZE (0x7f - 0x20)
|
#define ASCIISIZE (0x7f - 0x20)
|
||||||
#define SENDSIZE (ASCIISIZE+1)
|
#define SENDSIZE (ASCIISIZE+1)
|
||||||
|
@ -57,6 +57,59 @@
|
|||||||
* Private Functions
|
* Private Functions
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
|
static int create_socket(void)
|
||||||
|
{
|
||||||
|
socklen_t addrlen;
|
||||||
|
int sockfd;
|
||||||
|
|
||||||
|
#ifdef CONFIG_EXAMPLES_UDP_IPv4
|
||||||
|
struct sockaddr_in addr;
|
||||||
|
|
||||||
|
/* Create a new IPv4 UDP socket */
|
||||||
|
|
||||||
|
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
|
||||||
|
if (sockfd < 0)
|
||||||
|
{
|
||||||
|
printf("client ERROR: client socket failure %d\n", errno);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Bind the UDP socket to a IPv4 port */
|
||||||
|
|
||||||
|
addr.sin_family = AF_INET;
|
||||||
|
addr.sin_port = HTONS(CONFIG_EXAMPLES_CLIENT_PORTNO);
|
||||||
|
addr.sin_addr.s_addr = HTONL(INADDR_ANY);
|
||||||
|
addrlen = sizeof(struct sockaddr_in);
|
||||||
|
|
||||||
|
#else
|
||||||
|
struct sockaddr_in6 addr;
|
||||||
|
|
||||||
|
/* Create a new IPv6 UDP socket */
|
||||||
|
|
||||||
|
sockfd = socket(AF_INET6, SOCK_DGRAM, 0);
|
||||||
|
if (sockfd < 0)
|
||||||
|
{
|
||||||
|
printf("client ERROR: client socket failure %d\n", errno);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Bind the UDP socket to a IPv6 port */
|
||||||
|
|
||||||
|
addr.sin6_family = AF_INET6;
|
||||||
|
addr.sin6_port = HTONS(CONFIG_EXAMPLES_CLIENT_PORTNO);
|
||||||
|
memset(addr.sin6_addr.s6_addr, 0, sizeof(struct in6_addr));
|
||||||
|
addrlen = sizeof(struct sockaddr_in6);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (bind(sockfd, (FAR struct sockaddr *)&addr, addrlen) < 0)
|
||||||
|
{
|
||||||
|
printf("client ERROR: Bind failure: %d\n", errno);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return sockfd;
|
||||||
|
}
|
||||||
|
|
||||||
static inline void fill_buffer(unsigned char *buf, int offset)
|
static inline void fill_buffer(unsigned char *buf, int offset)
|
||||||
{
|
{
|
||||||
int ch;
|
int ch;
|
||||||
@ -92,10 +145,10 @@ void send_client(void)
|
|||||||
|
|
||||||
/* Create a new UDP socket */
|
/* Create a new UDP socket */
|
||||||
|
|
||||||
sockfd = socket(PF_INETX, SOCK_DGRAM, 0);
|
sockfd = create_socket();
|
||||||
if (sockfd < 0)
|
if (sockfd < 0)
|
||||||
{
|
{
|
||||||
printf("client socket failure %d\n", errno);
|
printf("client ERROR: create_socket failed %d\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -111,12 +164,12 @@ void send_client(void)
|
|||||||
|
|
||||||
#ifdef CONFIG_EXAMPLES_UDP_IPv6
|
#ifdef CONFIG_EXAMPLES_UDP_IPv6
|
||||||
server.sin6_family = AF_INET6;
|
server.sin6_family = AF_INET6;
|
||||||
server.sin6_port = HTONS(PORTNO);
|
server.sin6_port = HTONS(CONFIG_EXAMPLES_SERVER_PORTNO);
|
||||||
memcpy(server.sin6_addr.s6_addr16, g_server_ipv6, 8 * sizeof(uint16_t));
|
memcpy(server.sin6_addr.s6_addr16, g_server_ipv6, 8 * sizeof(uint16_t));
|
||||||
addrlen = sizeof(struct sockaddr_in6);
|
addrlen = sizeof(struct sockaddr_in6);
|
||||||
#else
|
#else
|
||||||
server.sin_family = AF_INET;
|
server.sin_family = AF_INET;
|
||||||
server.sin_port = HTONS(PORTNO);
|
server.sin_port = HTONS(CONFIG_EXAMPLES_SERVER_PORTNO);
|
||||||
server.sin_addr.s_addr = (in_addr_t)g_server_ipv4;
|
server.sin_addr.s_addr = (in_addr_t)g_server_ipv4;
|
||||||
addrlen = sizeof(struct sockaddr_in);
|
addrlen = sizeof(struct sockaddr_in);
|
||||||
#endif
|
#endif
|
||||||
|
@ -124,13 +124,13 @@ void recv_server(void)
|
|||||||
|
|
||||||
#ifdef CONFIG_EXAMPLES_UDP_IPv6
|
#ifdef CONFIG_EXAMPLES_UDP_IPv6
|
||||||
server.sin6_family = AF_INET6;
|
server.sin6_family = AF_INET6;
|
||||||
server.sin6_port = HTONS(PORTNO);
|
server.sin6_port = HTONS(CONFIG_EXAMPLES_SERVER_PORTNO);
|
||||||
memset(&server.sin6_addr, 0, sizeof(struct in6_addr));
|
memset(&server.sin6_addr, 0, sizeof(struct in6_addr));
|
||||||
|
|
||||||
addrlen = sizeof(struct sockaddr_in6);
|
addrlen = sizeof(struct sockaddr_in6);
|
||||||
#else
|
#else
|
||||||
server.sin_family = AF_INET;
|
server.sin_family = AF_INET;
|
||||||
server.sin_port = HTONS(PORTNO);
|
server.sin_port = HTONS(CONFIG_EXAMPLES_SERVER_PORTNO);
|
||||||
server.sin_addr.s_addr = HTONL(INADDR_ANY);
|
server.sin_addr.s_addr = HTONL(INADDR_ANY);
|
||||||
|
|
||||||
addrlen = sizeof(struct sockaddr_in);
|
addrlen = sizeof(struct sockaddr_in);
|
||||||
|
Loading…
Reference in New Issue
Block a user