diff --git a/cpu/native/net/wpcap.c b/cpu/native/net/wpcap.c index efc3968b6..643310d6d 100644 --- a/cpu/native/net/wpcap.c +++ b/cpu/native/net/wpcap.c @@ -609,6 +609,31 @@ wpcap_poll(void) PRINTF("SIN: Discarding echoed packet\n"); return 0; } + +/* To implement multihop, ignore packets to us from specified source macs + */ +// printf("ethtype=%x %x",*(packet+2*UIP_LLADDR_LEN),*(packet+2*UIP_LLADDR_LEN+1)); +// printf("hopcount=%u",*(packet+21)); +#if 0 + if (0 +// || (*(packet+11) ==0x1) //20 ignores router +// || (*(packet+11) ==0x10) + || (*(packet+11) ==0x20) //router ignores 20 + ) { + printf("i%x",*(packet+11)); + return 0; + } +/* If we are not the recipient, ignore packets from other RPL nodes */ + if (0 + || (*(packet+5) !=0x1) //router +// || (*(packet+11) ==0x10) + // || (*(packet+11) ==0x20) //router ignores 20 + ) { + printf("r%x",*(packet+11)); + return 0; + } +#endif + #endif /* UIP_CONF_IPV6 */ if(packet_header->caplen > UIP_BUFSIZE) { @@ -665,8 +690,7 @@ wfall_poll(void) u8_t wpcap_send(uip_lladdr_t *lladdr) { - // if(lladdr == NULL) { //when fallback used this gets ptr to lladdr of all zeroes on forwarded packets - if(1) { + if(lladdr == NULL) { /* the dest must be multicast*/ (&BUF->dest)->addr[0] = 0x33; (&BUF->dest)->addr[1] = 0x33; @@ -675,7 +699,17 @@ wpcap_send(uip_lladdr_t *lladdr) (&BUF->dest)->addr[4] = IPBUF->destipaddr.u8[14]; (&BUF->dest)->addr[5] = IPBUF->destipaddr.u8[15]; } else { - memcpy(&BUF->dest, lladdr, UIP_LLADDR_LEN); + //when fallback used this gets ptr to lladdr of all zeroes on forwarded packets, turn them into multicast(?) + if ((lladdr->addr[0]==0)&&(lladdr->addr[1]==0)&&(lladdr->addr[2]==0)&&(lladdr->addr[3]==0)&&(lladdr->addr[4]==0)&&(lladdr->addr[5]==0)) { + (&BUF->dest)->addr[0] = 0x33; + (&BUF->dest)->addr[1] = 0x33; + (&BUF->dest)->addr[2] = IPBUF->destipaddr.u8[12]; + (&BUF->dest)->addr[3] = IPBUF->destipaddr.u8[13]; + (&BUF->dest)->addr[4] = IPBUF->destipaddr.u8[14]; + (&BUF->dest)->addr[5] = IPBUF->destipaddr.u8[15]; + } else { + memcpy(&BUF->dest, lladdr, UIP_LLADDR_LEN); + } } memcpy(&BUF->src, &uip_lladdr, UIP_LLADDR_LEN); PRINTF("SUT: %u\n", uip_len); diff --git a/platform/minimal-net/contiki-conf.h b/platform/minimal-net/contiki-conf.h index 2f61858d5..bd2f5b098 100644 --- a/platform/minimal-net/contiki-conf.h +++ b/platform/minimal-net/contiki-conf.h @@ -73,6 +73,15 @@ typedef unsigned short uip_stats_t; //#define HARD_CODED_ADDRESS "fdfd::" //assign prefix; address becomes fdfd::206:98ff:fe00:232 //#define HARD_CODED_ADDRESS "fdfd::10" //assign prefix and ipv6 address fdfd::ff:fe00:10 +/* The status.shtml page shows addresses, neighbors, and routes on ipv6 builds. Use this define to enable + * the needed routines in httpd-cgi.c on the webserver6 build. The status page is present in + * /apps/webserver/httpd-fs/ but not in the default /apps/webserver/httpd-fsdata.c file. + * To include it run the PERL script /../../tools/makefsdata from the /apps/webserver/ directory. + * NB: Webserver builds on all platforms will use the current httpd-fsdata.c file. The added 160 bytes + * could overflow memory on the smaller platforms. + */ +#define WEBSERVER_CONF_STATUSPAGE 1 + /* RPL currently works only on Windows. *nix would require converting the tun interface to two pcap tees. */ #define UIP_CONF_IPV6_RPL 0 #define RPL_BORDER_ROUTER 0 @@ -83,9 +92,14 @@ typedef unsigned short uip_stats_t; * Different instances can be made by changing the link layer portion of HARD_CODED_ADDRESS in contiki-main.c * Rename them to e.g. webserver6.10, webserver6.11, ... * They should all attach to a minimal-net rpl border that uses the same primary interface. + * For multihop testing, configure intermediate notes as routers. */ #define RPL_CONF_ADJUST_LLH_LEN 1 -#define HARD_CODED_ADDRESS "bbbb::10" //the prefix is ignored for a rpl end node +#define HARD_CODED_ADDRESS "bbbb::10" //the prefix is ignored for a rpl node +#define UIP_CONF_ROUTER 0 +#define UIP_CONF_ND6_SEND_RA 0 +#define UIP_CONF_ND6_REACHABLE_TIME 600000 +#define UIP_CONF_ND6_RETRANS_TIMER 10000 #if RPL_BORDER_ROUTER /* RPL border router accepts packets from the host through the fallback and directs them to @@ -105,6 +119,7 @@ typedef unsigned short uip_stats_t; * Possibly minimal-net RPL motes could also be added to this interface? * */ +#undef UIP_CONF_ROUTER #define UIP_CONF_ROUTER 1 //#define RPL_CONF_STATS 0 //#define UIP_CONF_BUFFER_SIZE 1300 @@ -113,9 +128,9 @@ typedef unsigned short uip_stats_t; //#define WPCAP_FALLBACK_ADDRESS "bbbb::1" //bbbb::1 is the default fallback prefix #undef HARD_CODED_ADDRESS #define HARD_CODED_ADDRESS "bbbb::1" //bbbb::ff:fe00:1 is the RPL border router default -#define UIP_CONF_ND6_SEND_RA 0 -#define UIP_CONF_ND6_REACHABLE_TIME 600000 -#define UIP_CONF_ND6_RETRANS_TIMER 10000 +//#define UIP_CONF_ND6_SEND_RA 0 +//#define UIP_CONF_ND6_REACHABLE_TIME 600000 +//#define UIP_CONF_ND6_RETRANS_TIMER 10000 #endif #endif diff --git a/platform/minimal-net/contiki-main.c b/platform/minimal-net/contiki-main.c index ba10af75d..c65dd3977 100644 --- a/platform/minimal-net/contiki-main.c +++ b/platform/minimal-net/contiki-main.c @@ -173,7 +173,7 @@ main(void) * ::10 becomes fe80::ff:fe00:10 and prefix awaits RA or RPL formation * bbbb:: gives an address of bbbb::206:98ff:fe00:232 if non-RPL */ -//#define HARD_CODED_ADDRESS "bbbb::40" +//#define HARD_CODED_ADDRESS "bbbb::20" #ifdef HARD_CODED_ADDRESS { uip_ipaddr_t ipaddr; @@ -191,11 +191,12 @@ main(void) #endif process_init(); - - procinit_init(); - +/* procinit_init initializes RPL which sets a ctimer for the first DIS */ +/* We must start etimers and ctimers,before calling it */ + process_start(&etimer_process, NULL); ctimer_init(); + procinit_init(); autostart_start(autostart_processes); #if RPL_BORDER_ROUTER