2011-09-28 16:29:01 +02:00
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <string.h>
|
|
|
|
#include <malloc.h>
|
|
|
|
|
|
|
|
#include <posix_io.h>
|
|
|
|
#include <shell.h>
|
|
|
|
#include <board_uart0.h>
|
2012-01-24 03:19:11 +01:00
|
|
|
#include "hwtimer.h"
|
2011-09-28 16:29:01 +02:00
|
|
|
#include <vtimer.h>
|
|
|
|
#include <ltc4150.h>
|
|
|
|
#include <thread.h>
|
|
|
|
#include <cc110x_ng.h>
|
|
|
|
#include <transceiver.h>
|
|
|
|
#include <time.h>
|
|
|
|
#include <rtc.h>
|
|
|
|
#include "sys/net/sixlowpan/sixlowmac.h"
|
|
|
|
#include "sys/net/sixlowpan/sixlowip.h"
|
|
|
|
#include "sys/net/sixlowpan/sixlowborder.h"
|
|
|
|
#include "sys/net/sixlowpan/sixlowpan.h"
|
|
|
|
#include "sys/net/sixlowpan/sixlowerror.h"
|
|
|
|
#include "sys/net/destiny/udp.h"
|
2011-10-13 04:31:07 +02:00
|
|
|
#include "sys/net/destiny/tcp.h"
|
2011-09-28 16:29:01 +02:00
|
|
|
#include "sys/net/destiny/socket.h"
|
|
|
|
#include "sys/net/destiny/in.h"
|
|
|
|
#include "sys/net/destiny/destiny.h"
|
2012-01-24 03:19:11 +01:00
|
|
|
#include "sys/net/destiny/tcp_timer.h"
|
2011-10-13 04:31:07 +02:00
|
|
|
#include "sys/net/net_help/net_help.h"
|
2012-01-24 03:19:11 +01:00
|
|
|
#include "sys/net/net_help/msg_help.h"
|
2011-09-28 16:29:01 +02:00
|
|
|
|
2011-10-13 04:31:07 +02:00
|
|
|
uint8_t udp_server_thread_pid;
|
|
|
|
char udp_server_stack_buffer[UDP_STACK_SIZE];
|
2011-09-28 16:29:01 +02:00
|
|
|
|
2011-10-13 04:31:07 +02:00
|
|
|
uint8_t tcp_server_thread_pid;
|
|
|
|
char tcp_server_stack_buffer[TCP_STACK_SIZE];
|
2011-09-28 16:29:01 +02:00
|
|
|
|
2011-11-01 05:47:28 +01:00
|
|
|
uint8_t tcp_cht_pid;
|
|
|
|
char tcp_cht_stack_buffer[TCP_STACK_SIZE];
|
|
|
|
|
2011-11-01 21:04:28 +01:00
|
|
|
typedef struct tcp_msg_t
|
2011-11-01 05:47:28 +01:00
|
|
|
{
|
|
|
|
int node_number;
|
|
|
|
char tcp_string_msg[50];
|
|
|
|
}tcp_message_t;
|
|
|
|
tcp_message_t current_message;
|
2011-10-28 04:37:12 +02:00
|
|
|
|
2011-10-13 04:31:07 +02:00
|
|
|
void init_tl (char *str)
|
|
|
|
{
|
|
|
|
init_transport_layer();
|
|
|
|
}
|
|
|
|
|
2011-11-01 05:47:28 +01:00
|
|
|
void tcp_ch(void)
|
2011-10-28 04:37:12 +02:00
|
|
|
{
|
2011-11-11 03:41:08 +01:00
|
|
|
uint32_t state = 0;
|
2012-01-24 03:19:11 +01:00
|
|
|
msg_t recv_msg, send_msg;
|
2011-11-02 02:55:38 +01:00
|
|
|
sockaddr6_t stSockAddr;
|
2011-11-11 03:41:08 +01:00
|
|
|
msg_receive(&recv_msg);
|
|
|
|
int SocketFD = socket(PF_INET6, SOCK_STREAM, IPPROTO_TCP);
|
|
|
|
if (-1 == SocketFD)
|
|
|
|
{
|
|
|
|
printf("cannot create socket");
|
2012-01-24 03:19:11 +01:00
|
|
|
return;
|
2011-11-11 03:41:08 +01:00
|
|
|
}
|
|
|
|
memset(&stSockAddr, 0, sizeof(stSockAddr));
|
|
|
|
stSockAddr.sin6_family = AF_INET6;
|
|
|
|
stSockAddr.sin6_port = HTONS(1100);
|
|
|
|
ipv6_init_address(&stSockAddr.sin6_addr, 0xabcd, 0x0, 0x0, 0x0, 0x3612, 0x00ff, 0xfe00, current_message.node_number);
|
|
|
|
ipv6_print_addr(&stSockAddr.sin6_addr);
|
|
|
|
if (-1 == connect(SocketFD, &stSockAddr, sizeof(stSockAddr), tcp_cht_pid))
|
|
|
|
{
|
2012-01-24 03:19:11 +01:00
|
|
|
printf("Connect failed!\n");
|
2011-11-11 03:41:08 +01:00
|
|
|
close(SocketFD);
|
2012-01-24 03:19:11 +01:00
|
|
|
return;
|
2011-11-11 03:41:08 +01:00
|
|
|
}
|
|
|
|
msg_receive(&recv_msg);
|
|
|
|
state = recv_msg.content.value;
|
|
|
|
while (state == 1)
|
|
|
|
{
|
|
|
|
printf("Trying to send data!\n");
|
|
|
|
if (send(SocketFD, (void*) current_message.tcp_string_msg, strlen(current_message.tcp_string_msg)+1, 0) < 0)
|
2011-11-01 21:04:28 +01:00
|
|
|
{
|
2011-11-11 03:41:08 +01:00
|
|
|
printf("Could not send %s!\n", current_message.tcp_string_msg);
|
2011-11-01 21:04:28 +01:00
|
|
|
}
|
2011-10-28 04:37:12 +02:00
|
|
|
|
2012-01-24 03:19:11 +01:00
|
|
|
msg_reply(&recv_msg, &send_msg);
|
|
|
|
|
2011-11-11 03:41:08 +01:00
|
|
|
msg_receive(&recv_msg);
|
|
|
|
state = recv_msg.content.value;
|
|
|
|
}
|
2012-01-24 03:19:11 +01:00
|
|
|
msg_reply(&recv_msg, &send_msg);
|
2011-11-11 03:41:08 +01:00
|
|
|
close(SocketFD);
|
2011-10-28 04:37:12 +02:00
|
|
|
}
|
|
|
|
|
2011-10-13 04:31:07 +02:00
|
|
|
void init_udp_server(void)
|
|
|
|
{
|
2011-11-02 02:55:38 +01:00
|
|
|
sockaddr6_t sa;
|
2011-10-13 04:31:07 +02:00
|
|
|
char buffer_main[256];
|
|
|
|
ssize_t recsize;
|
|
|
|
uint32_t fromlen;
|
|
|
|
int sock = socket(PF_INET6, SOCK_DGRAM, IPPROTO_UDP);
|
|
|
|
memset(&sa, 0, sizeof sa);
|
|
|
|
sa.sin6_family = AF_INET;
|
2011-10-28 04:37:12 +02:00
|
|
|
sa.sin6_port = HTONS(7654);
|
2011-10-13 04:31:07 +02:00
|
|
|
fromlen = sizeof(sa);
|
|
|
|
if (-1 == bind(sock, &sa, sizeof(sa), udp_server_thread_pid))
|
|
|
|
{
|
|
|
|
printf("Error bind failed!\n");
|
|
|
|
close(sock);
|
|
|
|
}
|
|
|
|
for (;;)
|
|
|
|
{
|
|
|
|
recsize = recvfrom(sock, (void *)buffer_main, 256, 0, &sa, &fromlen);
|
|
|
|
if (recsize < 0)
|
|
|
|
{
|
|
|
|
printf("ERROR: recsize < 0!\n");
|
|
|
|
}
|
|
|
|
printf("recsize: %i\n ", recsize);
|
2011-11-25 01:31:54 +01:00
|
|
|
printf("datagram: %s\n", buffer_main);
|
2011-10-13 04:31:07 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void init_tcp_server(void)
|
|
|
|
{
|
2011-11-02 02:55:38 +01:00
|
|
|
sockaddr6_t stSockAddr;
|
2012-01-03 02:16:43 +01:00
|
|
|
int read_bytes = -1;
|
2011-11-25 01:31:54 +01:00
|
|
|
char buff_msg[MAX_TCP_BUFFER];
|
2011-10-13 04:31:07 +02:00
|
|
|
int SocketFD = socket(PF_INET6, SOCK_STREAM, IPPROTO_TCP);
|
|
|
|
|
|
|
|
if(-1 == SocketFD)
|
|
|
|
{
|
|
|
|
perror("can not create socket");
|
|
|
|
exit(EXIT_FAILURE);
|
|
|
|
}
|
|
|
|
|
|
|
|
memset(&stSockAddr, 0, sizeof(stSockAddr));
|
|
|
|
|
|
|
|
stSockAddr.sin6_family = AF_INET6;
|
|
|
|
stSockAddr.sin6_port = HTONS(1100);
|
2011-11-01 05:47:28 +01:00
|
|
|
// TODO: HARDCODED! Use one of the IPv6 methods after initializing the node to get the correct ipv6 address!
|
|
|
|
ipv6_init_address(&stSockAddr.sin6_addr, 0xabcd, 0x0, 0x0, 0x0, 0x3612, 0x00ff, 0xfe00, get_radio_address());
|
|
|
|
ipv6_print_addr(&stSockAddr.sin6_addr);
|
2011-10-13 04:31:07 +02:00
|
|
|
|
|
|
|
if(-1 == bind(SocketFD, &stSockAddr, sizeof(stSockAddr), tcp_server_thread_pid))
|
|
|
|
{
|
|
|
|
perror("error bind failed");
|
|
|
|
close(SocketFD);
|
|
|
|
exit(EXIT_FAILURE);
|
|
|
|
}
|
2011-11-25 01:31:54 +01:00
|
|
|
print_internal_socket(getSocket(SocketFD));
|
2011-10-13 04:31:07 +02:00
|
|
|
if(-1 == listen(SocketFD, 10))
|
|
|
|
{
|
|
|
|
perror("error listen failed");
|
|
|
|
close(SocketFD);
|
|
|
|
exit(EXIT_FAILURE);
|
|
|
|
}
|
|
|
|
|
|
|
|
for(;;)
|
|
|
|
{
|
2011-10-28 04:37:12 +02:00
|
|
|
// Decide whether a new thread should be used to handle the new connection or the same (other queued
|
|
|
|
// connections would not be handled!)
|
2012-01-03 02:16:43 +01:00
|
|
|
read_bytes = -1;
|
|
|
|
printf("INFO: WAITING FOR INC CONNECTIONS!\n");
|
2011-10-28 04:37:12 +02:00
|
|
|
int ConnectFD = accept(SocketFD, NULL, 0, tcp_server_thread_pid);
|
2011-10-13 04:31:07 +02:00
|
|
|
if(0 > ConnectFD)
|
|
|
|
{
|
|
|
|
perror("error accept failed");
|
|
|
|
close(SocketFD);
|
|
|
|
exit(EXIT_FAILURE);
|
|
|
|
}
|
|
|
|
|
2012-01-03 02:16:43 +01:00
|
|
|
while (read_bytes != 0)
|
2011-11-25 01:31:54 +01:00
|
|
|
{
|
|
|
|
read_bytes = recv(ConnectFD, buff_msg, MAX_TCP_BUFFER, 0);
|
|
|
|
printf("--- Message: %s ---\n", buff_msg);
|
|
|
|
}
|
2012-01-03 02:16:43 +01:00
|
|
|
printf("INFO: CLOSING SOCKET!\n");
|
2011-10-13 04:31:07 +02:00
|
|
|
close(ConnectFD);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void init_udp_server_thread(char *str)
|
|
|
|
{
|
|
|
|
udp_server_thread_pid = thread_create(udp_server_stack_buffer, UDP_STACK_SIZE, PRIORITY_MAIN, CREATE_STACKTEST, init_udp_server, "init_udp_server");
|
|
|
|
printf("UDP SERVER THREAD PID: %i\n", udp_server_thread_pid);
|
|
|
|
}
|
|
|
|
|
|
|
|
void init_tcp_server_thread(char *str)
|
|
|
|
{
|
|
|
|
tcp_server_thread_pid = thread_create(tcp_server_stack_buffer, TCP_STACK_SIZE, PRIORITY_MAIN, CREATE_STACKTEST, init_tcp_server, "init_tcp_server");
|
|
|
|
printf("TCP SERVER THREAD PID: %i\n", tcp_server_thread_pid);
|
|
|
|
}
|
|
|
|
|
2011-11-01 05:47:28 +01:00
|
|
|
// Init TCP connection handler thread
|
|
|
|
void init_tcp_cht(char *str)
|
|
|
|
{
|
|
|
|
tcp_cht_pid = thread_create( tcp_cht_stack_buffer,
|
|
|
|
TCP_STACK_SIZE,
|
|
|
|
PRIORITY_MAIN,
|
|
|
|
CREATE_STACKTEST,
|
|
|
|
tcp_ch,
|
2012-01-24 03:19:11 +01:00
|
|
|
"init_conn_handler");
|
2011-11-01 05:47:28 +01:00
|
|
|
printf("TCP CONNECTION HANDLER THREAD PID: %i\n", tcp_cht_pid);
|
|
|
|
}
|
|
|
|
|
2011-12-27 05:31:52 +01:00
|
|
|
void send_tcp_msg(char *str)
|
2011-10-13 04:31:07 +02:00
|
|
|
{
|
2012-01-24 03:19:11 +01:00
|
|
|
msg_t send_msg, recv_msg;
|
2011-11-11 03:41:08 +01:00
|
|
|
sscanf(str, "send_tcp %s", current_message.tcp_string_msg);
|
2012-01-03 02:16:43 +01:00
|
|
|
printf("Message: %s, strcmp: %i\n", current_message.tcp_string_msg, strcmp(current_message.tcp_string_msg, "close"));
|
|
|
|
if (strcmp(current_message.tcp_string_msg, "close") == 0)
|
|
|
|
{
|
|
|
|
send_msg.content.value = 0;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
send_msg.content.value = 1;
|
2012-01-24 03:19:11 +01:00
|
|
|
}
|
|
|
|
msg_send_receive(&send_msg, &recv_msg, tcp_cht_pid);
|
|
|
|
}
|
|
|
|
|
|
|
|
void send_tcp_bulk(char *str)
|
|
|
|
{
|
|
|
|
int i = 0, count;
|
|
|
|
char command[61];
|
|
|
|
char msg_string[50];
|
|
|
|
sscanf(str, "send_tcp_bulk %i %s", &count, msg_string);
|
|
|
|
for (i = 0; i < count; i++)
|
|
|
|
{
|
|
|
|
sprintf(command, "send_tcp %s%i", msg_string, i);
|
|
|
|
send_tcp_msg(command);
|
2012-01-03 02:16:43 +01:00
|
|
|
}
|
2011-11-11 03:41:08 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void connect_tcp(char *str)
|
|
|
|
{
|
|
|
|
msg_t send_msg;
|
|
|
|
sscanf(str, "connect_tcp %i", ¤t_message.node_number);
|
|
|
|
send_msg.content.value = 1;
|
|
|
|
msg_send(&send_msg, tcp_cht_pid, 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
void disconnect_tcp(char *str)
|
|
|
|
{
|
|
|
|
msg_t send_msg;
|
2011-11-01 05:47:28 +01:00
|
|
|
|
2011-11-11 03:41:08 +01:00
|
|
|
send_msg.content.value = 0;
|
|
|
|
msg_send(&send_msg, tcp_cht_pid, 0);
|
2011-10-13 04:31:07 +02:00
|
|
|
}
|
2011-09-28 16:29:01 +02:00
|
|
|
|
|
|
|
void init(char *str){
|
|
|
|
char command;
|
|
|
|
uint16_t r_addr;
|
|
|
|
ipv6_addr_t std_addr;
|
|
|
|
|
|
|
|
int res = sscanf(str, "init %c %hu", &command, &r_addr);
|
|
|
|
|
|
|
|
if(res < 1){
|
|
|
|
printf("Usage: init {h | r | a | e} radio_address\n");
|
|
|
|
printf("\th\tinitialize as host\n");
|
|
|
|
printf("\tr\tinitialize as router\n");
|
|
|
|
printf("\ta\tinitialize as ad-hoc router\n");
|
|
|
|
printf("\tb\tinitialize as border router\n\n");
|
|
|
|
printf("\tradio_address must be an 8 bit integer\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
ipv6_init_address(&std_addr,0xABCD,0,0,0,0x1034,0x00FF,0xFE00,r_addr);
|
|
|
|
|
|
|
|
switch (command) {
|
|
|
|
case 'h':
|
|
|
|
printf("INFO: Initialize as host on radio address %hu\n", r_addr);
|
|
|
|
if (r_addr > 255) {
|
|
|
|
printf("ERROR: radio_address not an 8 bit integer\n");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
sixlowpan_init(TRANSCEIVER_CC1100,r_addr,0);
|
|
|
|
break;
|
|
|
|
case 'r':
|
|
|
|
printf("INFO: Initialize as router on radio address %hu\n", r_addr);
|
|
|
|
if (r_addr > 255) {
|
|
|
|
printf("ERROR: radio_address not an 8 bit integer\n");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
sixlowpan_init(TRANSCEIVER_CC1100, r_addr,0);
|
|
|
|
ipv6_init_iface_as_router();
|
|
|
|
break;
|
|
|
|
case 'a':
|
|
|
|
printf("INFO: Initialize as adhoc router on radio address %hu\n", r_addr);
|
|
|
|
if (r_addr > 255) {
|
|
|
|
printf("ERROR: radio_address not an 8 bit integer\n");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
sixlowpan_adhoc_init(TRANSCEIVER_CC1100, &std_addr, r_addr);
|
|
|
|
break;
|
|
|
|
case 'b':
|
|
|
|
printf("INFO: Initialize as border router on radio address %hu\n", r_addr);
|
|
|
|
if (r_addr > 255) {
|
|
|
|
printf("ERROR: radio_address not an 8 bit integer\n");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
res = border_initialize(TRANSCEIVER_CC1100, &std_addr);
|
|
|
|
switch (res) {
|
|
|
|
case (SUCCESS): printf("INFO: Border router initialized.\n"); break;
|
|
|
|
case (SIXLOWERROR_ADDRESS): printf("ERROR: Illegal IP address: ");
|
|
|
|
ipv6_print_addr(&std_addr); break;
|
|
|
|
default: printf("ERROR: Unknown error (%d).\n", res); break;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
printf("ERROR: Unknown command '%c'\n", command);
|
|
|
|
break;
|
|
|
|
}
|
2011-10-13 04:31:07 +02:00
|
|
|
|
2011-09-28 16:29:01 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void bootstrapping(char *str){
|
|
|
|
sixlowpan_bootstrapping();
|
|
|
|
}
|
|
|
|
|
|
|
|
void send_packet(char *str){
|
|
|
|
uint8_t send_buffer[UDP_STACK_SIZE];
|
|
|
|
uint8_t text[20];
|
|
|
|
sscanf(str, "send %s", text);
|
|
|
|
|
2011-11-01 21:04:28 +01:00
|
|
|
ipv6_hdr_t *test_ipv6_header = ((ipv6_hdr_t*)(&send_buffer));
|
|
|
|
udp_hdr_t *test_udp_header = ((udp_hdr_t*)(&send_buffer[IPV6_HDR_LEN]));
|
2011-09-28 16:29:01 +02:00
|
|
|
uint8_t *payload = &send_buffer[IPV6_HDR_LEN+UDP_HDR_LEN];
|
|
|
|
|
|
|
|
ipv6_addr_t ipaddr;
|
|
|
|
ipv6_init_address(&ipaddr, 0xabcd, 0x0, 0x0, 0x0, 0x3612, 0x00ff, 0xfe00, 0x0005);
|
|
|
|
ipv6_print_addr(&ipaddr);
|
|
|
|
|
|
|
|
memcpy(&(test_ipv6_header->destaddr), &ipaddr, 16);
|
|
|
|
ipv6_get_saddr(&(test_ipv6_header->srcaddr), &(test_ipv6_header->destaddr));
|
|
|
|
test_ipv6_header->version_trafficclass = IPV6_VER;
|
|
|
|
test_ipv6_header->trafficclass_flowlabel = 0;
|
|
|
|
test_ipv6_header->flowlabel = 0;
|
|
|
|
test_ipv6_header->nextheader = IPPROTO_UDP;
|
|
|
|
test_ipv6_header->hoplimit = MULTIHOP_HOPLIMIT;
|
|
|
|
test_ipv6_header->length = sizeof(test_udp_header);
|
|
|
|
|
|
|
|
test_udp_header->src_port = 9821;
|
|
|
|
test_udp_header->dst_port = 7654;
|
|
|
|
test_udp_header->checksum = 0;
|
|
|
|
|
|
|
|
memcpy(payload, text, strlen((char*)text)+1);
|
|
|
|
test_udp_header->length = 8 + strlen((char*)text)+1;
|
|
|
|
|
|
|
|
test_udp_header->checksum = ~udp_csum(test_ipv6_header, test_udp_header);
|
|
|
|
|
|
|
|
sixlowpan_send(&ipaddr, (uint8_t*)(test_udp_header), test_udp_header->length, IPPROTO_UDP);
|
|
|
|
}
|
|
|
|
|
|
|
|
void send_udp(char *str)
|
|
|
|
{
|
|
|
|
int sock;
|
2011-11-02 02:55:38 +01:00
|
|
|
sockaddr6_t sa;
|
2011-09-28 16:29:01 +02:00
|
|
|
ipv6_addr_t ipaddr;
|
|
|
|
int bytes_sent;
|
2011-10-13 04:31:07 +02:00
|
|
|
int address;
|
2011-09-28 16:29:01 +02:00
|
|
|
uint8_t text[20];
|
2011-10-13 04:31:07 +02:00
|
|
|
sscanf(str, "send_udp %s %i", text, &address);
|
2011-09-28 16:29:01 +02:00
|
|
|
|
|
|
|
sock = socket(PF_INET6, SOCK_DGRAM, IPPROTO_UDP);
|
|
|
|
if (-1 == sock)
|
|
|
|
{
|
|
|
|
printf("Error Creating Socket!");
|
|
|
|
exit(EXIT_FAILURE);
|
|
|
|
}
|
|
|
|
|
|
|
|
memset(&sa, 0, sizeof sa);
|
|
|
|
|
2011-10-13 04:31:07 +02:00
|
|
|
ipv6_init_address(&ipaddr, 0xabcd, 0x0, 0x0, 0x0, 0x3612, 0x00ff, 0xfe00, (uint16_t)address);
|
2011-09-28 16:29:01 +02:00
|
|
|
ipv6_print_addr(&ipaddr);
|
|
|
|
|
|
|
|
sa.sin6_family = AF_INET;
|
|
|
|
memcpy(&sa.sin6_addr, &ipaddr, 16);
|
2011-10-28 04:37:12 +02:00
|
|
|
sa.sin6_port = HTONS(7654);
|
2011-09-28 16:29:01 +02:00
|
|
|
|
|
|
|
bytes_sent = sendto(sock, (char*)text, strlen((char*)text)+1, 0, &sa, sizeof sa);
|
|
|
|
if (bytes_sent < 0)
|
|
|
|
{
|
|
|
|
printf("Error sending packet!\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
close(sock);
|
|
|
|
}
|
|
|
|
|
|
|
|
void set_radio_chann(char *str){
|
|
|
|
uint16_t chann;
|
|
|
|
int res = sscanf(str, "set_chann %hu", &chann);
|
|
|
|
if(res < 1){
|
|
|
|
printf("Usage: set_chann [channel]\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
cc110x_set_channel(chann);
|
|
|
|
}
|
|
|
|
|
|
|
|
void get_r_address(char *str){
|
|
|
|
printf("radio: %hu\n", cc110x_get_address());
|
|
|
|
}
|
|
|
|
|
|
|
|
void ip(char *str){
|
|
|
|
ipv6_iface_print_addrs();
|
|
|
|
}
|
|
|
|
|
|
|
|
void context(char *str){
|
|
|
|
uint8_t i;
|
|
|
|
lowpan_context_t *context;
|
|
|
|
|
|
|
|
for(i = 0; i < LOWPAN_CONTEXT_MAX; i++){
|
|
|
|
context = lowpan_context_num_lookup(i);
|
|
|
|
if (context != NULL) {
|
|
|
|
printf("%2d\tLifetime: %5u\tLength: %3d\t",context->num,context->lifetime,context->length);
|
|
|
|
ipv6_print_addr(&(context->prefix));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-11-01 05:47:28 +01:00
|
|
|
void shows(char *str)
|
|
|
|
{
|
|
|
|
print_sockets();
|
|
|
|
}
|
|
|
|
|
2011-12-26 02:59:58 +01:00
|
|
|
void showReas(char *str)
|
|
|
|
{
|
|
|
|
printReasBuffers();
|
|
|
|
}
|
|
|
|
|
2012-01-24 03:19:11 +01:00
|
|
|
void kill_process(char *str)
|
|
|
|
{
|
|
|
|
msg_t send;
|
|
|
|
int mypid;
|
|
|
|
send.type = RETURNNOW;
|
|
|
|
sscanf(str, "kill_process %i", &mypid);
|
|
|
|
msg_send(&send, mypid, 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
void continue_process(char *str)
|
|
|
|
{
|
|
|
|
msg_t send;
|
|
|
|
int pid;
|
|
|
|
sscanf(str, "continue_process %i", &pid);
|
|
|
|
send.type = TCP_CONTINUE;
|
|
|
|
msg_send(&send, pid, 0);
|
|
|
|
}
|
|
|
|
|
2011-09-28 16:29:01 +02:00
|
|
|
const shell_command_t shell_commands[] = {
|
|
|
|
{"init", "", init},
|
|
|
|
{"addr", "", get_r_address},
|
|
|
|
{"set_chann", "", set_radio_chann},
|
|
|
|
{"boot", "", bootstrapping},
|
|
|
|
{"ip", "", ip},
|
2011-12-26 02:59:58 +01:00
|
|
|
{"shows", "Show Sockets", shows},
|
|
|
|
{"show_reas", "Show reassembly Buffers", showReas},
|
2011-09-28 16:29:01 +02:00
|
|
|
{"context", "", context},
|
|
|
|
{"init_tl", "", init_tl},
|
2011-10-13 04:31:07 +02:00
|
|
|
{"init_udp_server_thread", "", init_udp_server_thread},
|
|
|
|
{"init_tcp_server_thread", "", init_tcp_server_thread},
|
2011-11-01 05:47:28 +01:00
|
|
|
{"init_tcp_cht", "", init_tcp_cht},
|
2011-11-11 03:41:08 +01:00
|
|
|
{"connect_tcp", "", connect_tcp},
|
2011-12-27 05:31:52 +01:00
|
|
|
{"send_tcp", "", send_tcp_msg},
|
2011-09-28 16:29:01 +02:00
|
|
|
{"send_udp", "", send_udp},
|
2012-01-24 03:19:11 +01:00
|
|
|
{"send_tcp_bulk", "send_tcp_bulk NO_OF_PACKETS PAYLOAD", send_tcp_bulk},
|
|
|
|
{"kill_process", "", kill_process},
|
|
|
|
{"continue_process", "", continue_process},
|
2011-09-28 16:29:01 +02:00
|
|
|
{NULL, NULL, NULL}
|
|
|
|
};
|
|
|
|
|
|
|
|
int main(void) {
|
|
|
|
printf("6LoWPAN Transport Layers\n");
|
|
|
|
posix_open(uart0_handler_pid, 0);
|
2011-10-13 04:31:07 +02:00
|
|
|
init_tl(NULL);
|
2011-09-28 16:29:01 +02:00
|
|
|
shell_t shell;
|
|
|
|
shell_init(&shell, shell_commands, uart0_readc, uart0_putc);
|
2011-10-13 04:31:07 +02:00
|
|
|
|
2011-09-28 16:29:01 +02:00
|
|
|
shell_run(&shell);
|
2011-10-13 04:31:07 +02:00
|
|
|
|
2011-09-28 16:29:01 +02:00
|
|
|
return 0;
|
|
|
|
}
|