Added uip-over-mesh, bugfixes, printing of statistics, renamed init() function to netsim_init()
This commit is contained in:
parent
eea7f463d7
commit
1b762247fa
12 changed files with 128 additions and 148 deletions
|
@ -30,7 +30,7 @@
|
||||||
*
|
*
|
||||||
* Author: Adam Dunkels <adam@sics.se>
|
* Author: Adam Dunkels <adam@sics.se>
|
||||||
*
|
*
|
||||||
* $Id: contiki-main.c,v 1.7 2007/03/15 21:58:13 adamdunkels Exp $
|
* $Id: contiki-main.c,v 1.8 2007/03/22 18:59:34 adamdunkels Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "contiki.h"
|
#include "contiki.h"
|
||||||
|
@ -44,6 +44,7 @@
|
||||||
#include "net/ethernode-uip.h"
|
#include "net/ethernode-uip.h"
|
||||||
#include "net/ethernode-rime.h"
|
#include "net/ethernode-rime.h"
|
||||||
#include "net/ethernode.h"
|
#include "net/ethernode.h"
|
||||||
|
#include "net/uip-over-mesh.h"
|
||||||
|
|
||||||
#include "ether.h"
|
#include "ether.h"
|
||||||
|
|
||||||
|
@ -59,14 +60,13 @@
|
||||||
|
|
||||||
static struct uip_fw_netif tapif =
|
static struct uip_fw_netif tapif =
|
||||||
{UIP_FW_NETIF(0,0,0,0, 0,0,0,0, tapdev_send)};
|
{UIP_FW_NETIF(0,0,0,0, 0,0,0,0, tapdev_send)};
|
||||||
|
static struct uip_fw_netif meshif =
|
||||||
|
{UIP_FW_NETIF(172,16,0,0, 255,255,0,0, uip_over_mesh_send)};
|
||||||
/*static struct uip_fw_netif ethernodeif =
|
/*static struct uip_fw_netif ethernodeif =
|
||||||
{UIP_FW_NETIF(172,16,0,0, 255,255,0,0, ethernode_drv_send)};*/
|
{UIP_FW_NETIF(172,16,0,0, 255,255,0,0, ethernode_drv_send)};*/
|
||||||
|
|
||||||
static const struct uip_eth_addr ethaddr = {{0x00,0x06,0x98,0x01,0x02,0x12}};
|
static const struct uip_eth_addr ethaddr = {{0x00,0x06,0x98,0x01,0x02,0x12}};
|
||||||
|
|
||||||
/*PROCESS(test_send_process, "Test send stuff");
|
|
||||||
PROCESS(test_tcp_process, "Test TCP");*/
|
|
||||||
|
|
||||||
SENSORS(&button_sensor, &pir_sensor, &vib_sensor, &radio_sensor);
|
SENSORS(&button_sensor, &pir_sensor, &vib_sensor, &radio_sensor);
|
||||||
|
|
||||||
PROCINIT(&sensors_process, &etimer_process, &tcpip_process,
|
PROCINIT(&sensors_process, &etimer_process, &tcpip_process,
|
||||||
|
@ -74,79 +74,6 @@ PROCINIT(&sensors_process, &etimer_process, &tcpip_process,
|
||||||
ðernode_rime_process,
|
ðernode_rime_process,
|
||||||
&uip_fw_process);
|
&uip_fw_process);
|
||||||
|
|
||||||
#if 0
|
|
||||||
static
|
|
||||||
PT_THREAD(send_packet(struct pt *pt,
|
|
||||||
struct uip_udp_conn *c, process_event_t ev,
|
|
||||||
process_data_t data))
|
|
||||||
{
|
|
||||||
PT_BEGIN(pt);
|
|
||||||
|
|
||||||
tcpip_poll_udp(c);
|
|
||||||
|
|
||||||
PT_YIELD_UNTIL(pt, ev == tcpip_event);
|
|
||||||
|
|
||||||
uip_send("hej", 3);
|
|
||||||
|
|
||||||
PT_END(pt);
|
|
||||||
}
|
|
||||||
|
|
||||||
PROCESS_THREAD(test_send_process, ev, data)
|
|
||||||
{
|
|
||||||
static struct uip_udp_conn *conn;
|
|
||||||
static struct etimer etimer;
|
|
||||||
static struct pt send_pt;
|
|
||||||
|
|
||||||
PROCESS_BEGIN();
|
|
||||||
|
|
||||||
conn = udp_broadcast_new(HTONS(3737), NULL);
|
|
||||||
|
|
||||||
etimer_set(&etimer, CLOCK_SECOND * 2);
|
|
||||||
while(1) {
|
|
||||||
PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&etimer) || uip_newdata());
|
|
||||||
|
|
||||||
if(uip_newdata()) {
|
|
||||||
/* printf("Got a packet!\n");*/
|
|
||||||
}
|
|
||||||
|
|
||||||
if(etimer_expired(&etimer)) {
|
|
||||||
PROCESS_SPAWN(&send_pt, send_packet(&send_pt, conn, ev, data));
|
|
||||||
etimer_set(&etimer, CLOCK_SECOND * 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
PROCESS_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
PROCESS_THREAD(test_tcp_process, ev, data)
|
|
||||||
{
|
|
||||||
uip_ipaddr_t server;
|
|
||||||
|
|
||||||
PROCESS_BEGIN();
|
|
||||||
|
|
||||||
uip_ipaddr(server, 255,255,255,255);
|
|
||||||
tcp_connect(server, HTONS(1000), NULL);
|
|
||||||
|
|
||||||
while(1) {
|
|
||||||
PROCESS_WAIT_EVENT();
|
|
||||||
printf("test_tcp_process: event %d\n", ev);
|
|
||||||
}
|
|
||||||
|
|
||||||
PROCESS_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* 0 */
|
|
||||||
/*---------------------------------------------------------------------------*/
|
|
||||||
/*static void
|
|
||||||
idle(void)
|
|
||||||
{
|
|
||||||
ether_server_poll();
|
|
||||||
display_tick();
|
|
||||||
display_redraw();
|
|
||||||
ether_tick();
|
|
||||||
ek_run();
|
|
||||||
}*/
|
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
void
|
void
|
||||||
contiki_main(int flag)
|
contiki_main(int flag)
|
||||||
|
@ -160,16 +87,20 @@ contiki_main(int flag)
|
||||||
|
|
||||||
procinit_init();
|
procinit_init();
|
||||||
|
|
||||||
|
uip_init();
|
||||||
|
|
||||||
rime_init();
|
rime_init();
|
||||||
|
uip_over_mesh_init(0);
|
||||||
|
|
||||||
if(flag == 1) {
|
if(flag == 1) {
|
||||||
process_start(&tapdev_drv_process, NULL);
|
process_start(&tapdev_drv_process, NULL);
|
||||||
/* uip_fw_register(ðernodeif);*/
|
uip_fw_register(&meshif);
|
||||||
uip_fw_default(&tapif);
|
uip_fw_default(&tapif);
|
||||||
printf("uip_hostaddr %02x%02x\n", uip_hostaddr.u16[0], uip_hostaddr.u16[1]);
|
printf("uip_hostaddr %02x%02x\n", uip_hostaddr.u16[0], uip_hostaddr.u16[1]);
|
||||||
} else {
|
} else {
|
||||||
/* uip_fw_default(ðernodeif);*/
|
uip_fw_default(&meshif);
|
||||||
}
|
}
|
||||||
|
|
||||||
leds_green(LEDS_ON);
|
leds_green(LEDS_ON);
|
||||||
|
|
||||||
autostart_start(autostart_processes);
|
autostart_start(autostart_processes);
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
*
|
*
|
||||||
* Author: Adam Dunkels <adam@sics.se>
|
* Author: Adam Dunkels <adam@sics.se>
|
||||||
*
|
*
|
||||||
* $Id: ether.c,v 1.5 2007/03/13 13:07:47 adamdunkels Exp $
|
* $Id: ether.c,v 1.6 2007/03/22 18:59:34 adamdunkels Exp $
|
||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
* \file
|
* \file
|
||||||
|
@ -107,13 +107,16 @@ static int strength;
|
||||||
|
|
||||||
static int collisions = 1;
|
static int collisions = 1;
|
||||||
static int num_collisions = 0;
|
static int num_collisions = 0;
|
||||||
static int num_packets = 0;
|
static int num_sent = 0;
|
||||||
|
static int num_received = 0;
|
||||||
|
static int drop_probability = 0;
|
||||||
|
static int num_drops = 0;
|
||||||
|
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
|
|
||||||
static struct timeval t1;
|
static struct timeval t1;
|
||||||
/*-----------------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------------*/
|
||||||
void
|
int
|
||||||
ether_print_stats(void)
|
ether_print_stats(void)
|
||||||
{
|
{
|
||||||
unsigned long time;
|
unsigned long time;
|
||||||
|
@ -122,7 +125,20 @@ ether_print_stats(void)
|
||||||
|
|
||||||
time = (t2.tv_sec * 1000 + t2.tv_usec / 1000) -
|
time = (t2.tv_sec * 1000 + t2.tv_usec / 1000) -
|
||||||
(t1.tv_sec * 1000 + t1.tv_usec / 1000);
|
(t1.tv_sec * 1000 + t1.tv_usec / 1000);
|
||||||
printf("%d, %d, %f\n", num_packets, num_collisions, time/1000.0);
|
/* printf("%d, %d, %f\n", num_packets, num_collisions, time/1000.0);*/
|
||||||
|
printf("Time: %f\n", time/1000.0);
|
||||||
|
printf("Total packets sent: %d\n", num_sent);
|
||||||
|
printf("Total collisions: %d\n", num_collisions);
|
||||||
|
printf("Total packets receptions: %d\n", num_received);
|
||||||
|
printf("Total randomly dropped packets: %d\n", num_drops);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
void
|
||||||
|
ether_set_drop_probability(double p)
|
||||||
|
{
|
||||||
|
drop_probability = p * 65536;
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------------*/
|
||||||
void
|
void
|
||||||
|
@ -204,8 +220,8 @@ ether_client_init(int port)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------------*/
|
||||||
u16_t
|
int
|
||||||
ether_client_poll(u8_t *buf, int bufsize)
|
ether_client_poll(void)
|
||||||
{
|
{
|
||||||
int ret, len;
|
int ret, len;
|
||||||
fd_set fdset;
|
fd_set fdset;
|
||||||
|
@ -216,7 +232,24 @@ ether_client_poll(u8_t *buf, int bufsize)
|
||||||
FD_SET(sc, &fdset);
|
FD_SET(sc, &fdset);
|
||||||
|
|
||||||
tv.tv_sec = 0;
|
tv.tv_sec = 0;
|
||||||
tv.tv_usec = 5000;
|
tv.tv_usec = 10000;
|
||||||
|
|
||||||
|
return select(sc + 1, &fdset, NULL, NULL, &tv);
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
u16_t
|
||||||
|
ether_client_read(u8_t *buf, int bufsize)
|
||||||
|
{
|
||||||
|
int ret, len;
|
||||||
|
fd_set fdset;
|
||||||
|
struct timeval tv;
|
||||||
|
struct ether_hdr *hdr = (struct ether_hdr *)rxbuffer;
|
||||||
|
|
||||||
|
FD_ZERO(&fdset);
|
||||||
|
FD_SET(sc, &fdset);
|
||||||
|
|
||||||
|
tv.tv_sec = 0;
|
||||||
|
tv.tv_usec = 10000;
|
||||||
|
|
||||||
|
|
||||||
ret = select(sc + 1, &fdset, NULL, NULL, &tv);
|
ret = select(sc + 1, &fdset, NULL, NULL, &tv);
|
||||||
|
@ -365,7 +398,7 @@ ether_tick(void)
|
||||||
range of this node. */
|
range of this node. */
|
||||||
for(p = list_head(active_packets); p != NULL; p = p->next) {
|
for(p = list_head(active_packets); p != NULL; p = p->next) {
|
||||||
|
|
||||||
num_packets++;
|
num_sent++;
|
||||||
|
|
||||||
/* Update the node type. */
|
/* Update the node type. */
|
||||||
hdr = (struct ether_hdr *)p->data;
|
hdr = (struct ether_hdr *)p->data;
|
||||||
|
@ -402,13 +435,18 @@ ether_tick(void)
|
||||||
|
|
||||||
if(interference) {
|
if(interference) {
|
||||||
num_collisions++;
|
num_collisions++;
|
||||||
printf("Collisions %d\n", num_collisions);
|
/* printf("Collisions %d\n", num_collisions);*/
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!interference) {
|
if(!interference) {
|
||||||
/* printf("ether: delivering packet from %d to %d\n",
|
/* printf("ether: delivering packet from %d to %d\n",
|
||||||
hdr->srcid, port);*/
|
hdr->srcid, port);*/
|
||||||
send_packet(p->data, p->len, port);
|
if((unsigned int)((rand() * 17) % 65536) >= drop_probability) {
|
||||||
|
send_packet(p->data, p->len, port);
|
||||||
|
num_received++;
|
||||||
|
} else {
|
||||||
|
num_drops++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
*
|
*
|
||||||
* Author: Adam Dunkels <adam@sics.se>
|
* Author: Adam Dunkels <adam@sics.se>
|
||||||
*
|
*
|
||||||
* $Id: ether.h,v 1.4 2007/03/13 13:07:48 adamdunkels Exp $
|
* $Id: ether.h,v 1.5 2007/03/22 18:59:34 adamdunkels Exp $
|
||||||
*/
|
*/
|
||||||
#ifndef __ETHER_H__
|
#ifndef __ETHER_H__
|
||||||
#define __ETHER_H__
|
#define __ETHER_H__
|
||||||
|
@ -59,7 +59,7 @@ void ether_client_init(int port);
|
||||||
void ether_tick(void);
|
void ether_tick(void);
|
||||||
|
|
||||||
|
|
||||||
u16_t ether_client_poll(u8_t *buf, int len);
|
u16_t ether_client_read(u8_t *buf, int len);
|
||||||
void ether_server_poll(void);
|
void ether_server_poll(void);
|
||||||
|
|
||||||
void ether_put(char *packet, int len, int src_x, int src_y);
|
void ether_put(char *packet, int len, int src_x, int src_y);
|
||||||
|
@ -75,8 +75,9 @@ clock_time_t ether_time(void);
|
||||||
/*#define ETHER_STRENGTH 24*/
|
/*#define ETHER_STRENGTH 24*/
|
||||||
int ether_strength(void);
|
int ether_strength(void);
|
||||||
void ether_set_strength(int s);
|
void ether_set_strength(int s);
|
||||||
|
|
||||||
|
|
||||||
void ether_set_collisions(int c);
|
void ether_set_collisions(int c);
|
||||||
|
void ether_set_drop_probability(double p);
|
||||||
|
|
||||||
|
int ether_print_stats(void);
|
||||||
|
|
||||||
#endif /* __ETHER_H__ */
|
#endif /* __ETHER_H__ */
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
*
|
*
|
||||||
* Author: Adam Dunkels <adam@sics.se>
|
* Author: Adam Dunkels <adam@sics.se>
|
||||||
*
|
*
|
||||||
* $Id: main.c,v 1.4 2006/10/23 09:01:06 adamdunkels Exp $
|
* $Id: main.c,v 1.5 2007/03/22 18:59:34 adamdunkels Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -111,7 +111,6 @@ start_node(int x, int y, int b)
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
static unsigned short port = NODES_PORTBASE;
|
static unsigned short port = NODES_PORTBASE;
|
||||||
|
|
||||||
|
|
||||||
pid = fork();
|
pid = fork();
|
||||||
|
|
||||||
if(pid == 0) {
|
if(pid == 0) {
|
||||||
|
@ -121,18 +120,16 @@ start_node(int x, int y, int b)
|
||||||
|
|
||||||
srandom(getpid());
|
srandom(getpid());
|
||||||
|
|
||||||
usleep(1000 * ((random() & 0x0f) << 6) );
|
usleep(1000 * (rand() % 1000));
|
||||||
|
|
||||||
node_init(port - NODES_PORTBASE + 2, x, y, b);
|
node_init(port - NODES_PORTBASE + 2, x, y, b);
|
||||||
ethernode_init(port);
|
ethernode_init(port);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
contiki_main(b);
|
contiki_main(b);
|
||||||
|
|
||||||
/* NOTREACHED */
|
/* NOTREACHED */
|
||||||
}
|
}
|
||||||
/* printf("Adding sensor %d at (%d,%d)\n", pid, x, y);*/
|
/* printf("Adding sensor %d at (%d,%d)\n", pid, x, y);*/
|
||||||
main_process = 1;
|
main_process = 1;
|
||||||
nodes_add(pid, x, y, port, port - NODES_PORTBASE + 2);
|
nodes_add(pid, x, y, port, port - NODES_PORTBASE + 2);
|
||||||
|
|
||||||
|
@ -163,8 +160,9 @@ main(int argc, char **argv)
|
||||||
nodes_init();
|
nodes_init();
|
||||||
|
|
||||||
atexit(nodes_kill);
|
atexit(nodes_kill);
|
||||||
|
atexit(ether_print_stats);
|
||||||
|
|
||||||
init();
|
netsim_init();
|
||||||
|
|
||||||
ether_server_init();
|
ether_server_init();
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
*
|
*
|
||||||
* Author: Adam Dunkels <adam@sics.se>
|
* Author: Adam Dunkels <adam@sics.se>
|
||||||
*
|
*
|
||||||
* $Id: ethernode-rime.c,v 1.3 2007/03/15 21:58:37 adamdunkels Exp $
|
* $Id: ethernode-rime.c,v 1.4 2007/03/22 18:59:34 adamdunkels Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "contiki.h"
|
#include "contiki.h"
|
||||||
|
@ -58,7 +58,7 @@ PROCESS_THREAD(ethernode_rime_process, ev, data)
|
||||||
|
|
||||||
rimebuf_clear();
|
rimebuf_clear();
|
||||||
|
|
||||||
len = ethernode_poll(rimebuf_dataptr(), RIMEBUF_SIZE);
|
len = ethernode_read(rimebuf_dataptr(), RIMEBUF_SIZE);
|
||||||
|
|
||||||
if(len > 0) {
|
if(len > 0) {
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
*
|
*
|
||||||
* Author: Adam Dunkels <adam@sics.se>
|
* Author: Adam Dunkels <adam@sics.se>
|
||||||
*
|
*
|
||||||
* $Id: ethernode-uip.c,v 1.2 2007/03/15 21:59:10 adamdunkels Exp $
|
* $Id: ethernode-uip.c,v 1.3 2007/03/22 18:59:34 adamdunkels Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "contiki.h"
|
#include "contiki.h"
|
||||||
|
@ -65,7 +65,7 @@ PROCESS_THREAD(ethernode_uip_process, ev, data)
|
||||||
PROCESS_WAIT_EVENT();
|
PROCESS_WAIT_EVENT();
|
||||||
|
|
||||||
/* Poll Ethernet device to see if there is a frame avaliable. */
|
/* Poll Ethernet device to see if there is a frame avaliable. */
|
||||||
uip_len = ethernode_poll(uip_buf, UIP_BUFSIZE);
|
uip_len = ethernode_read(uip_buf, UIP_BUFSIZE);
|
||||||
|
|
||||||
if(uip_len > 0) {
|
if(uip_len > 0) {
|
||||||
/* printf("%d: new packet len %d\n", node_id, uip_len);*/
|
/* printf("%d: new packet len %d\n", node_id, uip_len);*/
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
*
|
*
|
||||||
* Author: Adam Dunkels <adam@sics.se>
|
* Author: Adam Dunkels <adam@sics.se>
|
||||||
*
|
*
|
||||||
* $Id: ethernode-uip.h,v 1.1 2007/03/14 00:32:30 adamdunkels Exp $
|
* $Id: ethernode-uip.h,v 1.2 2007/03/22 18:59:34 adamdunkels Exp $
|
||||||
*/
|
*/
|
||||||
#ifndef __ETHERNODE_UIP_H__
|
#ifndef __ETHERNODE_UIP_H__
|
||||||
#define __ETHERNODE_UIP_H__
|
#define __ETHERNODE_UIP_H__
|
||||||
|
@ -40,6 +40,4 @@ PROCESS_NAME(ethernode_uip_process);
|
||||||
|
|
||||||
u8_t ethernode_uip_send(void);
|
u8_t ethernode_uip_send(void);
|
||||||
|
|
||||||
u8_t ethernode_uip_send(void);
|
|
||||||
|
|
||||||
#endif /* __ETHERNODE_UIP_H__ */
|
#endif /* __ETHERNODE_UIP_H__ */
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
*
|
*
|
||||||
* Author: Adam Dunkels <adam@sics.se>
|
* Author: Adam Dunkels <adam@sics.se>
|
||||||
*
|
*
|
||||||
* $Id: ethernode.c,v 1.5 2007/03/14 00:32:30 adamdunkels Exp $
|
* $Id: ethernode.c,v 1.6 2007/03/22 18:59:34 adamdunkels Exp $
|
||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
* \file
|
* \file
|
||||||
|
@ -122,13 +122,13 @@ ethernode_init(int port)
|
||||||
*/
|
*/
|
||||||
/*-------------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------------*/
|
||||||
int
|
int
|
||||||
ethernode_poll(u8_t *buf, int bufsize)
|
ethernode_read(u8_t *buf, int bufsize)
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
u8_t tmpbuf[UIP_BUFSIZE];
|
u8_t tmpbuf[UIP_BUFSIZE];
|
||||||
struct hdr *hdr = (struct hdr *)tmpbuf;
|
struct hdr *hdr = (struct hdr *)tmpbuf;
|
||||||
|
|
||||||
len = ether_client_poll(tmpbuf, UIP_BUFSIZE);
|
len = ether_client_read(tmpbuf, UIP_BUFSIZE);
|
||||||
if(len == 0) {
|
if(len == 0) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,7 +40,7 @@ PROCESS_THREAD(tapdev_drv_process, ev, data)
|
||||||
uip_arp_arpin();
|
uip_arp_arpin();
|
||||||
/* If the above function invocation resulted in data that
|
/* If the above function invocation resulted in data that
|
||||||
should be sent out on the network, the global variable
|
should be sent out on the network, the global variable
|
||||||
uip_len is set to a value > 0. */
|
uip_len is set to a value > 0. */
|
||||||
if(uip_len > 0) {
|
if(uip_len > 0) {
|
||||||
tapdev_send_raw();
|
tapdev_send_raw();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,37 +1,37 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2001, Swedish Institute of Computer Science.
|
* Copyright (c) 2001, Swedish Institute of Computer Science.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
* are met:
|
* are met:
|
||||||
*
|
*
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer.
|
* notice, this list of conditions and the following disclaimer.
|
||||||
*
|
*
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
* documentation and/or other materials provided with the distribution.
|
* documentation and/or other materials provided with the distribution.
|
||||||
*
|
*
|
||||||
* 3. Neither the name of the Institute nor the names of its contributors
|
* 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
|
* may be used to endorse or promote products derived from this software
|
||||||
* without specific prior written permission.
|
* without specific prior written permission.
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
|
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
|
||||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
* 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
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* Author: Adam Dunkels <adam@sics.se>
|
* Author: Adam Dunkels <adam@sics.se>
|
||||||
*
|
*
|
||||||
* $Id: tapdev.c,v 1.1 2006/06/17 22:41:36 adamdunkels Exp $
|
* $Id: tapdev.c,v 1.2 2007/03/22 18:59:34 adamdunkels Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@ -94,12 +94,12 @@ tapdev_poll(void)
|
||||||
ret = select(fd + 1, &fdset, NULL, NULL, &tv);
|
ret = select(fd + 1, &fdset, NULL, NULL, &tv);
|
||||||
if(ret == 0) {
|
if(ret == 0) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
ret = read(fd, uip_buf, UIP_BUFSIZE);
|
ret = read(fd, uip_buf, UIP_BUFSIZE);
|
||||||
if(ret == -1) {
|
if(ret == -1) {
|
||||||
perror("tapdev_poll: read");
|
perror("tapdev_poll: read");
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
void
|
void
|
||||||
|
@ -125,9 +125,11 @@ tapdev_init(void)
|
||||||
}
|
}
|
||||||
#endif /* Linux */
|
#endif /* Linux */
|
||||||
|
|
||||||
snprintf(buf, sizeof(buf), "ifconfig tap0 inet 192.168.2.1");
|
snprintf(buf, sizeof(buf), "ifconfig tap0 inet 192.168.1.1");
|
||||||
system(buf);
|
system(buf);
|
||||||
printf("%s\n", buf);
|
snprintf(buf, sizeof(buf), "route add -net 172.16.0.0 192.168.1.2");
|
||||||
|
system(buf);
|
||||||
|
printf("%s\n", buf);
|
||||||
|
|
||||||
lasttime = 0;
|
lasttime = 0;
|
||||||
|
|
||||||
|
@ -136,8 +138,8 @@ tapdev_init(void)
|
||||||
|
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
static void
|
static void
|
||||||
do_send(void)
|
do_send(void)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
char tmpbuf[UIP_BUFSIZE];
|
char tmpbuf[UIP_BUFSIZE];
|
||||||
|
@ -172,7 +174,7 @@ do_send(void)
|
||||||
perror("tap_dev: tapdev_send: writev");
|
perror("tap_dev: tapdev_send: writev");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
u8_t
|
u8_t
|
||||||
tapdev_send(void)
|
tapdev_send(void)
|
||||||
|
|
|
@ -28,13 +28,13 @@
|
||||||
*
|
*
|
||||||
* This file is part of the Contiki operating system.
|
* This file is part of the Contiki operating system.
|
||||||
*
|
*
|
||||||
* @(#)$Id: netsim-init.c,v 1.1 2007/03/21 09:07:15 adamdunkels Exp $
|
* @(#)$Id: netsim-init.c,v 1.2 2007/03/22 18:59:34 adamdunkels Exp $
|
||||||
*/
|
*/
|
||||||
#include "init.h"
|
#include "init.h"
|
||||||
#include "random.h"
|
#include "random.h"
|
||||||
|
|
||||||
void
|
void
|
||||||
init(void)
|
netsim_init(void)
|
||||||
{
|
{
|
||||||
int x, y;
|
int x, y;
|
||||||
|
|
||||||
|
|
|
@ -30,11 +30,12 @@
|
||||||
*
|
*
|
||||||
* Author: Adam Dunkels <adam@sics.se>
|
* Author: Adam Dunkels <adam@sics.se>
|
||||||
*
|
*
|
||||||
* $Id: node.c,v 1.4 2007/03/13 13:07:48 adamdunkels Exp $
|
* $Id: node.c,v 1.5 2007/03/22 18:59:34 adamdunkels Exp $
|
||||||
*/
|
*/
|
||||||
#include "node.h"
|
#include "node.h"
|
||||||
#include "contiki.h"
|
#include "contiki.h"
|
||||||
#include "net/uip.h"
|
#include "net/uip.h"
|
||||||
|
#include "net/rime.h"
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
@ -58,11 +59,22 @@ node_init(int id, int posx, int posy, int b)
|
||||||
/* node.type = NODE_TYPE_NORMAL;*/
|
/* node.type = NODE_TYPE_NORMAL;*/
|
||||||
|
|
||||||
if(b) {
|
if(b) {
|
||||||
uip_ipaddr(&addr, 192,168,250,2);
|
uip_ipaddr(&addr, 192,168,1,2);
|
||||||
} else {
|
} else {
|
||||||
uip_ipaddr(&addr, 10,10,posx,posy);
|
uip_ipaddr(&addr, 172,16,posx,posy);
|
||||||
|
|
||||||
}
|
}
|
||||||
uip_sethostaddr(&addr);
|
uip_sethostaddr(&addr);
|
||||||
|
|
||||||
|
{
|
||||||
|
rimeaddr_t nodeaddr;
|
||||||
|
|
||||||
|
nodeaddr.u8[0] = posx;
|
||||||
|
nodeaddr.u8[1] = posy;
|
||||||
|
rimeaddr_set_node_addr(&nodeaddr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
drift = random() % 95726272;
|
drift = random() % 95726272;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue