Skip to content

Commit

Permalink
Added native-border-router and slip-radio
Browse files Browse the repository at this point in the history
  • Loading branch information
nfi committed Jan 1, 2012
1 parent 65edc32 commit 8b83ffe
Show file tree
Hide file tree
Showing 37 changed files with 3,171 additions and 99 deletions.
5 changes: 4 additions & 1 deletion Makefile.include
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,10 @@ ifdef UIP_CONF_IPV6
resolv.c tcpdump.c uiplib.c simple-udp.c
NET += $(UIP) uip-icmp6.c uip-nd6.c uip-packetqueue.c \
sicslowpan.c neighbor-attr.c neighbor-info.c uip-ds6.c
include $(CONTIKI)/core/net/rpl/Makefile.rpl
ifneq ($(UIP_CONF_RPL),0)
CFLAGS += -DUIP_CONF_IPV6_RPL=1
include $(CONTIKI)/core/net/rpl/Makefile.rpl
endif # UIP_CONF_RPL
else # UIP_CONF_IPV6
UIP = uip.c uiplib.c resolv.c tcpip.c psock.c hc.c uip-split.c uip-fw.c \
uip-fw-drv.c uip_arp.c tcpdump.c uip-neighbor.c uip-udp-packet.c \
Expand Down
1 change: 1 addition & 0 deletions apps/slip-cmd/Makefile.slip-cmd
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
slip-cmd_src = cmd.c packetutils.c
71 changes: 71 additions & 0 deletions apps/slip-cmd/cmd.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
/*
* Copyright (c) 2011, Swedish Institute of Computer Science.
* All rights reserved.
*
* 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.
*/

/**
* \file
* A brief description of what this file is
* \author
* Niclas Finne <[email protected]>
* Joakim Eriksson <[email protected]>
*/

#include "cmd.h"

#ifndef CMD_CONF_OUTPUT
#define CMD_OUTPUT slip_cmd_input
#else
#define CMD_OUTPUT CMD_CONF_OUTPUT
#endif /* CMD_CONF_OUTPUT */

void CMD_OUTPUT(const uint8_t *data, int data_len);

extern cmd_handler_t cmd_handlers[];

/*---------------------------------------------------------------------------*/
void
cmd_input(const uint8_t *data, int data_len)
{
int i;
for(i = 0; cmd_handlers[i] != NULL; i++) {
if(cmd_handlers[i](data, data_len)) {
/* Command has been handled */
return;
}
}

/* Unknown command */
cmd_send((uint8_t *)"EUnknown command", 16);
}
/*---------------------------------------------------------------------------*/
void
cmd_send(const uint8_t *data, int data_len)
{
CMD_OUTPUT(data, data_len);
}
/*---------------------------------------------------------------------------*/
53 changes: 53 additions & 0 deletions apps/slip-cmd/cmd.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/*
* Copyright (c) 2011, Swedish Institute of Computer Science.
* All rights reserved.
*
* 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.
*/

/**
* \file
* Simple command handler
* \author
* Niclas Finne <[email protected]>
* Joakim Eriksson <[email protected]>
*/

#ifndef __CMD_H__
#define __CMD_H__

#include "contiki.h"

#define CMD_TYPE_ERR 'E'

typedef int (* cmd_handler_t)(const uint8_t *data, int len);

#define CMD_HANDLERS(...) \
const cmd_handler_t cmd_handlers[] = {__VA_ARGS__, NULL}

void cmd_input(const uint8_t *data, int data_len);
void cmd_send(const uint8_t *data, int data_len);

#endif /* __CMD_H__ */
81 changes: 81 additions & 0 deletions apps/slip-cmd/packetutils.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
/*
* Copyright (c) 2011, Swedish Institute of Computer Science.
* All rights reserved.
*
* 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.
*/

#include "contiki.h"
#include "net/packetbuf.h"
#define DEBUG DEBUG_NONE
#include "net/uip-debug.h"

/*---------------------------------------------------------------------------*/
int
packetutils_serialize_atts(uint8_t *data, int size)
{
int i;
/* set the length first later */
int pos = 1;
int cnt = 0;
/* assume that values are 16-bit */
uint16_t val;
PRINTF("packetutils: serializing packet atts");
for(i = 0; i < PACKETBUF_NUM_ATTRS; i++) {
val = packetbuf_attr(i);
if(val != 0) {
if(pos + 3 > size) {
return -1;
}
data[pos++] = i;
data[pos++] = val >> 8;
data[pos++] = val & 255;
cnt++;
PRINTF(" %d=%d", i, val);
}
}
PRINTF(" (%d)\n", cnt);

data[0] = cnt;
return pos;
}
/*---------------------------------------------------------------------------*/
int
packetutils_deserialize_atts(const uint8_t *data, int size)
{
int i, cnt, pos;

pos = 0;
cnt = data[pos++];
PRINTF("packetutils: deserializing %d packet atts:", cnt);
for(i = 0; i < cnt; i++) {
PRINTF(" %d=%d", data[pos], (data[pos + 1] << 8) | data[pos + 2]);
packetbuf_set_attr(data[pos], (data[pos + 1] << 8) | data[pos + 2]);
pos += 3;
}
PRINTF("\n");
return pos;
}
/*---------------------------------------------------------------------------*/
37 changes: 37 additions & 0 deletions apps/slip-cmd/packetutils.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/*
* Copyright (c) 2011, Swedish Institute of Computer Science.
* All rights reserved.
*
* 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.
*/

#ifndef __PACKETUTILS_H__
#define __PACKETUTILS_H__

int packetutils_serialize_atts(uint8_t *data, int size);

int packetutils_deserialize_atts(const uint8_t *data, int size);

#endif /* __PACKETUTILS_H__ */
2 changes: 1 addition & 1 deletion core/net/tcpip.c
Original file line number Diff line number Diff line change
Expand Up @@ -567,7 +567,7 @@ tcpip_ipv6_output(void)
if(locrt == NULL) {
if((nexthop = uip_ds6_defrt_choose()) == NULL) {
#ifdef UIP_FALLBACK_INTERFACE
printf("FALLBACK: removing ext hdrs & setting proto %d %d\n",
PRINTF("FALLBACK: removing ext hdrs & setting proto %d %d\n",
uip_ext_len, *((uint8_t *)UIP_IP_BUF + 40));
if(uip_ext_len > 0) {
uint8_t proto = *((uint8_t *)UIP_IP_BUF + 40);
Expand Down
2 changes: 0 additions & 2 deletions core/net/uip-icmp6.c
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,8 @@
#define UIP_IP_BUF ((struct uip_ip_hdr *)&uip_buf[UIP_LLH_LEN])
#define UIP_ICMP_BUF ((struct uip_icmp_hdr *)&uip_buf[uip_l2_l3_hdr_len])
#define UIP_ICMP6_ERROR_BUF ((struct uip_icmp6_error *)&uip_buf[uip_l2_l3_icmp_hdr_len])
#if UIP_CONF_IPV6_RPL
#define UIP_EXT_BUF ((struct uip_ext_hdr *)&uip_buf[uip_l2_l3_hdr_len])
#define UIP_FIRST_EXT_BUF ((struct uip_ext_hdr *)&uip_buf[UIP_LLIPH_LEN])
#endif /* UIP_CONF_IPV6_RPL */

/** \brief temporary IP address */
static uip_ipaddr_t tmp_ipaddr;
Expand Down
12 changes: 10 additions & 2 deletions core/net/uip6.c
Original file line number Diff line number Diff line change
Expand Up @@ -511,7 +511,14 @@ remove_ext_hdr(void)
{
/* Remove ext header before TCP/UDP processing. */
if(uip_ext_len > 0) {
PRINTF("Cutting ext-header before TCP send (%d)\n", uip_ext_len);
PRINTF("Cutting ext-header before TCP send (extlen: %d, uiplen: %d)\n",
uip_ext_len, uip_len);
if(uip_len - UIP_IPH_LEN- uip_ext_len < 0) {
PRINTF("ERROR: uip_len too short compared to ext len\n");
uip_ext_len = 0;
uip_len = 0;
return;
}
memmove(((uint8_t *)UIP_TCP_BUF) - uip_ext_len, (uint8_t *)UIP_TCP_BUF,
uip_len - UIP_IPH_LEN - uip_ext_len);

Expand Down Expand Up @@ -1349,14 +1356,15 @@ uip_process(u8_t flag)

icmp6_input:
/* This is IPv6 ICMPv6 processing code. */
PRINTF("icmp6_input: length %d\n", uip_len);
PRINTF("icmp6_input: length %d type: %d \n", uip_len, UIP_ICMP_BUF->type);

#if UIP_CONF_IPV6_CHECKS
/* Compute and check the ICMP header checksum */
if(uip_icmp6chksum() != 0xffff) {
UIP_STAT(++uip_stat.icmp.drop);
UIP_STAT(++uip_stat.icmp.chkerr);
UIP_LOG("icmpv6: bad checksum.");
PRINTF("icmpv6: bad checksum.");
goto drop;
}
#endif /*UIP_CONF_IPV6_CHECKS*/
Expand Down
30 changes: 30 additions & 0 deletions examples/ipv6/native-border-router/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
CONTIKI_PROJECT=border-router
all: $(CONTIKI_PROJECT)
APPS = slip-cmd

CONTIKI=../../..

WITH_UIP6=1
UIP_CONF_IPV6=1
CFLAGS+= -DUIP_CONF_IPV6_RPL

#linker optimizations
SMALL=1

CFLAGS += -DPROJECT_CONF_H=\"project-conf.h\"
PROJECT_SOURCEFILES += border-router-cmds.c tun-bridge.c border-router-rdc.c \
slip-config.c slip-dev.c

WITH_WEBSERVER=1
ifeq ($(WITH_WEBSERVER),1)
CFLAGS += -DWEBSERVER=1
PROJECT_SOURCEFILES += httpd-simple.c
else ifneq ($(WITH_WEBSERVER), 0)
APPS += $(WITH_WEBSERVER)
CFLAGS += -DWEBSERVER=2
endif

include $(CONTIKI)/Makefile.include

connect-router: border-router.native
sudo ./border-router.native aaaa::1/64
1 change: 1 addition & 0 deletions examples/ipv6/native-border-router/Makefile.target
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
TARGET = native
Loading

0 comments on commit 8b83ffe

Please sign in to comment.