From 494d2a3073b3e467d713423cb9b36a4f38fb4c04 Mon Sep 17 00:00:00 2001 From: joxe Date: Thu, 23 Sep 2010 18:17:27 +0000 Subject: [PATCH] only compare with global addresses when selecting source for a specific destination --- core/net/uip-ds6.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/net/uip-ds6.c b/core/net/uip-ds6.c index 2935c5821..7c069d489 100755 --- a/core/net/uip-ds6.c +++ b/core/net/uip-ds6.c @@ -773,7 +773,9 @@ uip_ds6_select_src(uip_ipaddr_t *src, uip_ipaddr_t *dst) /* find longest match */ for(locaddr = uip_ds6_if.addr_list; locaddr < uip_ds6_if.addr_list + UIP_DS6_ADDR_NB; locaddr++) { - if((locaddr->isused) && (locaddr->state == ADDR_PREFERRED)) { + /* Only preferred global (not link-local) addresses */ + if((locaddr->isused) && (locaddr->state == ADDR_PREFERRED) && + (!uip_is_addr_link_local(&locaddr->ipaddr))) { n = get_match_length(dst, &(locaddr->ipaddr)); if(n >= best) { best = n;