summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/src/cmd/ip/ipconfig/ipv6.c7
-rw-r--r--sys/src/cmd/ip/ipconfig/main.c4
2 files changed, 10 insertions, 1 deletions
diff --git a/sys/src/cmd/ip/ipconfig/ipv6.c b/sys/src/cmd/ip/ipconfig/ipv6.c
index 6819cd394..33820afc3 100644
--- a/sys/src/cmd/ip/ipconfig/ipv6.c
+++ b/sys/src/cmd/ip/ipconfig/ipv6.c
@@ -548,6 +548,7 @@ static void
recvrahost(uchar buf[], int pktlen)
{
int m, n, optype;
+ uchar src[IPaddrlen];
Lladdropt *llao;
Mtuopt *mtuo;
Prefixopt *prfo;
@@ -616,13 +617,17 @@ recvrahost(uchar buf[], int pktlen)
conf.validlt = nhgetl(prfo->validlt);
conf.preflt = nhgetl(prfo->preflt);
issueadd6(&conf);
+
if(conf.routerlt == 0)
break;
if((prfo->lar & RFMASK) != 0)
ipmove(conf.gaddr, prfo->pref);
else
ipmove(conf.gaddr, ra->src);
- adddefroute(conf.gaddr, conf.laddr, conf.v6pref, conf.mask);
+
+ memmove(src, conf.v6pref, 8);
+ memmove(src+8, conf.laddr+8, 8);
+ adddefroute(conf.gaddr, conf.laddr, src, conf.mask);
break;
}
}
diff --git a/sys/src/cmd/ip/ipconfig/main.c b/sys/src/cmd/ip/ipconfig/main.c
index 0fa5407d2..f599f93bf 100644
--- a/sys/src/cmd/ip/ipconfig/main.c
+++ b/sys/src/cmd/ip/ipconfig/main.c
@@ -737,6 +737,10 @@ adddefroute(uchar *gaddr, uchar *laddr, uchar *src, uchar *smask)
smask = IPnoaddr;
}
addroute(dst, mask, gaddr, laddr, src, smask);
+
+ /* also add a source specific route */
+ if(ipcmp(src, IPnoaddr) != 0 && ipcmp(src, v4prefix) != 0)
+ addroute(dst, mask, gaddr, laddr, src, IPallbits);
}