Example has been replaced by udp-ipv6

This commit is contained in:
nvt-se 2010-05-03 14:57:59 +00:00
parent 35282593c0
commit f690294842
8 changed files with 0 additions and 290 deletions

View file

@ -1,6 +0,0 @@
all: example-udp-receiver
UIP_CONF_IPV6=1
CONTIKI = ../..
include $(CONTIKI)/Makefile.include

View file

@ -1 +0,0 @@
TARGET = minimal-net

View file

@ -1 +0,0 @@
See examples/udp-sender-ipv6/README.

View file

@ -1,111 +0,0 @@
/*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the Institute nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* This file is part of the Contiki operating system.
*
*/
#include "contiki.h"
#include "contiki-lib.h"
#include "contiki-net.h"
#include <string.h>
#define DEBUG 1
#if DEBUG
#include <stdio.h>
#define PRINTF(...) printf(__VA_ARGS__)
#define PRINT6ADDR(addr) PRINTF(" %02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x ", ((u8_t *)addr)[0], ((u8_t *)addr)[1], ((u8_t *)addr)[2], ((u8_t *)addr)[3], ((u8_t *)addr)[4], ((u8_t *)addr)[5], ((u8_t *)addr)[6], ((u8_t *)addr)[7], ((u8_t *)addr)[8], ((u8_t *)addr)[9], ((u8_t *)addr)[10], ((u8_t *)addr)[11], ((u8_t *)addr)[12], ((u8_t *)addr)[13], ((u8_t *)addr)[14], ((u8_t *)addr)[15])
#define PRINTLLADDR(lladdr) PRINTF(" %02x:%02x:%02x:%02x:%02x:%02x ",(lladdr)->addr[0], (lladdr)->addr[1], (lladdr)->addr[2], (lladdr)->addr[3],(lladdr)->addr[4], (lladdr)->addr[5])
#else
#define PRINTF(...)
#define PRINT6ADDR(addr)
#define PRINTLLADDR(addr)
#endif
#define UDP_DATA_LEN 120
static struct uip_udp_conn *udpconn;
PROCESS(udp_process_receiver, "UDP test receiver");
AUTOSTART_PROCESSES(&udp_process_receiver);
/*---------------------------------------------------------------------------*/
static void
udphandler(process_event_t ev, process_data_t data)
{
if (ev == tcpip_event) {
if(uip_newdata()) {
((char *)uip_appdata)[uip_datalen()] = 0;
printf("Receiver received: '%s'\n", (char *)uip_appdata);
}
}
printf("Receiver sending to: ");
PRINT6ADDR(&udpconn->ripaddr);
printf("\n");
uip_udp_packet_send(udpconn, "Receiver says Hi!", strlen("Receiver says Hi!"));
}
/*---------------------------------------------------------------------------*/
PROCESS_THREAD(udp_process_receiver, ev, data)
{
uip_ipaddr_t ipaddr;
int a;
PROCESS_BEGIN();
PRINTF("Process test UDP receiver started\n");
PRINTF("Tentative link-local IPv6 address: ");
for(a = 0; a < UIP_DS6_ADDR_NB; a++) {
if(uip_ds6_if.addr_list[a].isused) {
PRINT6ADDR(&uip_ds6_if.addr_list[a].ipaddr);
PRINTF("\n");
}
}
PRINTF("\n");
#ifdef UDP_ADDR_A
uip_ip6addr(&ipaddr,
UDP_ADDR_A,UDP_ADDR_B,UDP_ADDR_C,UDP_ADDR_D,
UDP_ADDR_E,UDP_ADDR_F,UDP_ADDR_G,UDP_ADDR_H);
#else /* UDP_ADDR_A */
uip_ip6addr(&ipaddr,0xFE80,0,0,0,0x2022,0x2222,0x2222,0x2222);
#endif /* UDP_ADDR_A */
udpconn = udp_new(&ipaddr, HTONS(0xF0B0+1), NULL);
udp_bind(udpconn, HTONS(0xF0B0));
PRINTF("Created connection with remote peer ");
PRINT6ADDR(&udpconn->ripaddr);
PRINTF("local/remote port %u/%u\n", HTONS(udpconn->lport),HTONS(udpconn->rport));
while(1) {
PROCESS_YIELD();
udphandler(ev, data);
}
PROCESS_END();
}
/*---------------------------------------------------------------------------*/

View file

@ -1,6 +0,0 @@
all: example-udp-sender
UIP_CONF_IPV6=1
CONTIKI = ../..
include $(CONTIKI)/Makefile.include

View file

@ -1 +0,0 @@
TARGET = minimal-net

View file

@ -1,31 +0,0 @@
This example features a simple application sending udp packets on port 0xF0B0,
from port F0B1, to a udp receiver. It must be used in conjonction with a node
running the udp-receiver-ipv6 example.
We use this example to test UDP, and most particularly UDP header compression
with IPv6 and 6lowpan support. When IPv6 is used over an 802.15.4 link,
6lowpan acts as an adaptation layer between IPv6 and MAC. In particular,
it can compress IP headers and UDP headers.
With both HC1 and HC01 header compression schemes, UDP 16-bit ports are
compressed to 4 bits if they are between F0B0 and F0BF.
sender behavior:
The sender is implemented in examples/udp-sender-ipv6/example-udp-sender.c
and acts in the following way:
it waits 15 seconds (to be sure the node configures a global address, in case
a router on the link sends router advertisements usable for address
autoconfiguration) , then sends 5 UDP packets to the receiver address
entered hard-wired in the source code.
receiver behavior:
When receiving a packet, the receiver answers with a simmilar packet.
To run this example, contiki-conf.h must have at least the following flags
values:
#define UIP_CONF_UDP 1
#define UIP_CONF_IPV6 1
You must configure addresses example-udp-sender.c and
examples/udp-receiver-ipv6/example-udp-receiver.c which match your
platforms addresses.

View file

@ -1,133 +0,0 @@
/*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the Institute nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* This file is part of the Contiki operating system.
*
*/
#include "contiki.h"
#include "contiki-lib.h"
#include "contiki-net.h"
#include <string.h>
#define DEBUG 1
#if DEBUG
#include <stdio.h>
#define PRINTF(...) printf(__VA_ARGS__)
#define PRINT6ADDR(addr) PRINTF(" %02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x ", ((u8_t *)addr)[0], ((u8_t *)addr)[1], ((u8_t *)addr)[2], ((u8_t *)addr)[3], ((u8_t *)addr)[4], ((u8_t *)addr)[5], ((u8_t *)addr)[6], ((u8_t *)addr)[7], ((u8_t *)addr)[8], ((u8_t *)addr)[9], ((u8_t *)addr)[10], ((u8_t *)addr)[11], ((u8_t *)addr)[12], ((u8_t *)addr)[13], ((u8_t *)addr)[14], ((u8_t *)addr)[15])
#define PRINTLLADDR(lladdr) PRINTF(" %02x:%02x:%02x:%02x:%02x:%02x ",(lladdr)->addr[0], (lladdr)->addr[1], (lladdr)->addr[2], (lladdr)->addr[3],(lladdr)->addr[4], (lladdr)->addr[5])
#else
#define PRINTF(...)
#define PRINT6ADDR(addr)
#define PRINTLLADDR(addr)
#endif
#define UDP_NB 5
static struct etimer udp_periodic_timer;
static struct uip_udp_conn *udpconn;
static u8_t count = 0;
PROCESS(udp_process_sender, "UDP test sender");
AUTOSTART_PROCESSES(&udp_process_sender);
/*---------------------------------------------------------------------------*/
static u8_t
udphandler(process_event_t ev, process_data_t data)
{
if(etimer_expired(&udp_periodic_timer)) {
printf("Event timer expired\n");
count=0;
}
if(ev == tcpip_event) {
if(uip_newdata()) {
((char *)uip_appdata)[uip_datalen()] = 0;
printf("Sender received: '%s'\n", (char *)uip_appdata);
}
}
if(count < UDP_NB) {
count++;
printf("Sender sending to: ");
PRINT6ADDR(&udpconn->ripaddr);
printf("\n");
#if SEND_TOO_LARGE_PACKET_TO_TEST_FRAGMENTATION
uip_udp_packet_send(udpconn, "Sender says Hi!", UIP_APPDATA_SIZE);
#else /* SEND_TOO_LARGE_PACKET_TO_TEST_FRAGMENTATION */
uip_udp_packet_send(udpconn, "Sender says Hi!", strlen("Sender says Hi!"));
#endif /* SEND_TOO_LARGE_PACKET_TO_TEST_FRAGMENTATION */
}
etimer_set(&udp_periodic_timer, 13*CLOCK_SECOND + random_rand()%(4*CLOCK_SECOND));
return 0;
}
/*---------------------------------------------------------------------------*/
PROCESS_THREAD(udp_process_sender, ev, data)
{
uip_ipaddr_t ipaddr;
int a;
PROCESS_BEGIN();
PRINTF("Process test UDP sender started\n");
PRINTF("Tentative link-local IPv6 address: ");
for(a = 0; a < UIP_DS6_ADDR_NB; a++) {
if(uip_ds6_if.addr_list[a].isused) {
PRINT6ADDR(&uip_ds6_if.addr_list[a].ipaddr);
PRINTF("\n");
}
}
PRINTF("\n");
#ifdef UDP_ADDR_A
uip_ip6addr(&ipaddr,
UDP_ADDR_A,UDP_ADDR_B,UDP_ADDR_C,UDP_ADDR_D,
UDP_ADDR_E,UDP_ADDR_F,UDP_ADDR_G,UDP_ADDR_H);
#else /* UDP_ADDR_A */
uip_ip6addr(&ipaddr,0xfe80,0,0,0,0x6466,0x6666,0x6666,0x6666);
#endif /* UDP_ADDR_A */
/* new connection with remote host */
udpconn = udp_new(&ipaddr, HTONS(0xF0B0), NULL);
udp_bind(udpconn, HTONS(0xF0B0+1));
PRINTF("Created connection with remote peer ");
PRINT6ADDR(&udpconn->ripaddr);
PRINTF("local/remote port %u/%u\n", HTONS(udpconn->lport),HTONS(udpconn->rport));
etimer_set(&udp_periodic_timer, 15*CLOCK_SECOND);
while(1) {
PROCESS_YIELD();
udphandler(ev, data);
}
PROCESS_END();
}
/*---------------------------------------------------------------------------*/