|
|
|
@ -22,14 +22,16 @@
|
|
|
|
|
|
|
|
|
|
#define PORT (1234) |
|
|
|
|
|
|
|
|
|
void init_local_address(uint16_t r_addr) { |
|
|
|
|
void init_local_address(uint16_t r_addr) |
|
|
|
|
{ |
|
|
|
|
ipv6_addr_t std_addr; |
|
|
|
|
ipv6_addr_init(&std_addr, 0xabcd, 0xef12, 0, 0, 0x1034, 0x00ff, 0xfe00,
|
|
|
|
|
ipv6_addr_init(&std_addr, 0xabcd, 0xef12, 0, 0, 0x1034, 0x00ff, 0xfe00, |
|
|
|
|
r_addr); |
|
|
|
|
sixlowpan_lowpan_adhoc_init(TRANSCEIVER, &std_addr, r_addr); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int main(void) { |
|
|
|
|
int main(void) |
|
|
|
|
{ |
|
|
|
|
int sockfd, res; |
|
|
|
|
struct sockaddr_in6 my_addr, their_addr = { |
|
|
|
|
.sin6_family = AF_INET6, |
|
|
|
@ -40,11 +42,19 @@ int main(void) {
|
|
|
|
|
#endif |
|
|
|
|
.sin6_flowinfo = 0, |
|
|
|
|
#if R_ADDR == 1 |
|
|
|
|
.sin6_addr = {{{0xab, 0xcd, 0xef, 0x12, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
|
0x10, 0x34, 0x00, 0xff, 0xfe, 0x00, 0x00, 0x02}}}, |
|
|
|
|
.sin6_addr = {{{ |
|
|
|
|
0xab, 0xcd, 0xef, 0x12, 0x00, 0x00, 0x00, 0x00, |
|
|
|
|
0x10, 0x34, 0x00, 0xff, 0xfe, 0x00, 0x00, 0x02 |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
#else |
|
|
|
|
.sin6_addr = {{{0xab, 0xcd, 0xef, 0x12, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
|
0x10, 0x34, 0x00, 0xff, 0xfe, 0x00, 0x00, 0x01}}}, |
|
|
|
|
.sin6_addr = {{{ |
|
|
|
|
0xab, 0xcd, 0xef, 0x12, 0x00, 0x00, 0x00, 0x00, |
|
|
|
|
0x10, 0x34, 0x00, 0xff, 0xfe, 0x00, 0x00, 0x01 |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
#endif |
|
|
|
|
.sin6_scope_id = 0, |
|
|
|
|
}; |
|
|
|
@ -53,32 +63,36 @@ int main(void) {
|
|
|
|
|
init_local_address(R_ADDR); |
|
|
|
|
|
|
|
|
|
memcpy(buffer, "Hello, World!", 14); |
|
|
|
|
memcpy(&my_addr, &in6addr_any, sizeof (my_addr)); |
|
|
|
|
memcpy(&my_addr, &in6addr_any, sizeof(my_addr)); |
|
|
|
|
|
|
|
|
|
my_addr.sin6_port = PORT; |
|
|
|
|
|
|
|
|
|
sockfd = socket(AF_INET6, SOCK_DGRAM, 0); |
|
|
|
|
res = bind(sockfd, (struct sockaddr *)&my_addr, sizeof (my_addr)); |
|
|
|
|
res = bind(sockfd, (struct sockaddr *)&my_addr, sizeof(my_addr)); |
|
|
|
|
|
|
|
|
|
if (res < 0) { |
|
|
|
|
perror("Socket could not be bind"); |
|
|
|
|
return 1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#if R_ADDR == 1 |
|
|
|
|
res = sendto(sockfd, buffer, strlen(buffer), 0,
|
|
|
|
|
(struct sockaddr *)&their_addr,
|
|
|
|
|
(socklen_t) sizeof (their_addr)); |
|
|
|
|
res = sendto(sockfd, buffer, strlen(buffer), 0, |
|
|
|
|
(struct sockaddr *)&their_addr, |
|
|
|
|
(socklen_t) sizeof(their_addr)); |
|
|
|
|
#else |
|
|
|
|
socklen_t their_len; |
|
|
|
|
res = recvfrom(sockfd, buffer, strlen(buffer), 0,
|
|
|
|
|
(struct sockaddr *)&their_addr,
|
|
|
|
|
&their_len); |
|
|
|
|
res = recvfrom(sockfd, buffer, strlen(buffer), 0, |
|
|
|
|
(struct sockaddr *)&their_addr, |
|
|
|
|
&their_len); |
|
|
|
|
|
|
|
|
|
if (their_addr.sin6_addr.uint8[15] != 1) { |
|
|
|
|
fprintf(stderr, "Wrong sender address: %d\n", their_addr.sin6_addr.uint8[11]); |
|
|
|
|
return 1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
printf("Port: %d\n", their_addr.sin6_port); |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
if (res < 0) { |
|
|
|
|
perror("Message error"); |
|
|
|
|
return 1; |
|
|
|
|