summaryrefslogtreecommitdiff
path: root/sys/src/9/ip
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2021-10-10 14:22:14 +0000
committercinap_lenrek <cinap_lenrek@felloff.net>2021-10-10 14:22:14 +0000
commite687d254784b0c4ab12636f7a942f447418d5e82 (patch)
tree31c7aedd5ac817468533e5da3cdf7659988ecf3c /sys/src/9/ip
parent1a6324970d4cb0f0508caa3a685355d500709f1a (diff)
devip: use top bit (type) | subnet-id for V6H() route hash macro
theres no structure in the lower 32 bits of an ipv6 address. use the top bit to distinguish special stuff like multicast and link-local addresses, and use the 16-bit subnet-id bits for the rest.
Diffstat (limited to 'sys/src/9/ip')
-rw-r--r--sys/src/9/ip/iproute.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/sys/src/9/ip/iproute.c b/sys/src/9/ip/iproute.c
index e90f61d44..edf78cfd3 100644
--- a/sys/src/9/ip/iproute.c
+++ b/sys/src/9/ip/iproute.c
@@ -383,7 +383,7 @@ looknodetag(Route *r, char *tag)
}
#define V4H(a) ((a&0x07ffffff)>>(32-Lroot-5))
-#define V6H(a) (((a)[IPllen-1]&0x07ffffff)>>(32-Lroot-5))
+#define V6H(a) (((a)[0]&0x80000000)>>(32-Lroot) | ((a)[(IPllen/2)-1]&(0xffff>>(16-Lroot))))
static void
routeadd(Fs *f, Route *r)