diff options
| author | cinap_lenrek <cinap_lenrek@felloff.net> | 2018-04-11 22:57:16 +0200 |
|---|---|---|
| committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2018-04-11 22:57:16 +0200 |
| commit | 780c5dfd1a0e26d6f6320284529d87ecc11650a7 (patch) | |
| tree | a9159700395ce70977d6dd25686b9597059f46a5 | |
| parent | 874701d1934617a5992511b713c8a0fe08491dd9 (diff) | |
| download | plan9front-780c5dfd1a0e26d6f6320284529d87ecc11650a7.tar.xz | |
ip/ipconfig: setup per local address default routes
| -rw-r--r-- | sys/src/cmd/ip/ipconfig/ipv6.c | 7 | ||||
| -rw-r--r-- | sys/src/cmd/ip/ipconfig/main.c | 4 |
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); } |
