diff --git a/core/net/tcpip.c b/core/net/tcpip.c index 23e20af89..7e9286c82 100644 --- a/core/net/tcpip.c +++ b/core/net/tcpip.c @@ -29,7 +29,7 @@ * This file is part of the Contiki operating system. * * - * $Id: tcpip.c,v 1.25 2010/03/15 16:41:24 joxe Exp $ + * $Id: tcpip.c,v 1.26 2010/03/16 15:35:03 joxe Exp $ */ /** * \file @@ -73,6 +73,10 @@ void uip_log(char *msg); #define UIP_IP_BUF ((struct uip_ip_hdr *)&uip_buf[UIP_LLH_LEN]) #define UIP_TCP_BUF ((struct uip_tcpip_hdr *)&uip_buf[UIP_LLH_LEN]) +#ifdef UIP_FALLBACK_INTERFACE +external struct uip_fallback_interface UIP_FALLBACK_INTERFACE; +#endif + process_event_t tcpip_event; #if UIP_CONF_ICMP6 process_event_t tcpip_icmp6_event; @@ -568,7 +572,11 @@ tcpip_ipv6_output(void) locrt = uip_ds6_route_lookup(&UIP_IP_BUF->destipaddr); if(locrt == NULL) { if((nexthop = uip_ds6_defrt_choose()) == NULL) { +#ifdef UIP_FALLBACK_INTERFACE + UIP_FALLBACK_INTERFACE.output(); +#else PRINTF("tcpip_ipv6_output: Destination off-link but no route\n"); +#endif uip_len = 0; return; } @@ -741,7 +749,9 @@ PROCESS_THREAD(tcpip_process, ev, data) etimer_set(&periodic, CLOCK_SECOND / 2); uip_init(); - +#ifdef UIP_FALLBACK_INTERFACE + UIP_FALLBACK_INTERFACE.init(); +#endif while(1) { PROCESS_YIELD(); eventhandler(ev, data); diff --git a/core/net/uip.h b/core/net/uip.h index 492ee31e3..501ebfa1e 100644 --- a/core/net/uip.h +++ b/core/net/uip.h @@ -47,7 +47,7 @@ * * This file is part of the uIP TCP/IP stack. * - * $Id: uip.h,v 1.27 2010/03/15 16:41:24 joxe Exp $ + * $Id: uip.h,v 1.28 2010/03/16 15:35:03 joxe Exp $ * */ @@ -1356,21 +1356,11 @@ struct uip_udp_conn { extern struct uip_udp_conn *uip_udp_conn; extern struct uip_udp_conn uip_udp_conns[UIP_UDP_CONNS]; -struct uip_router { - int (*activate)(void); - int (*deactivate)(void); - uip_ipaddr_t *(*lookup)(uip_ipaddr_t *destipaddr, uip_ipaddr_t *nexthop); +struct uip_fallback_interface { + void (*init)(void); + void (*output)(void); }; -#if UIP_CONF_ROUTER -extern const struct uip_router *uip_router; - -/** - * uIP routing driver registration function. - */ -void uip_router_register(const struct uip_router *router); -#endif /*UIP_CONF_ROUTER*/ - #if UIP_CONF_ICMP6 struct uip_icmp6_conn { uip_icmp6_appstate_t appstate;