diff options
author | Jacob Moody <moody@posixcafe.org> | 2022-11-02 05:44:01 +0000 |
---|---|---|
committer | Jacob Moody <moody@posixcafe.org> | 2022-11-02 05:44:01 +0000 |
commit | 9984f40f07b94a2b71074d78237ff87d893ccf1e (patch) | |
tree | 1a3e5c032d91921f8ef3b294ae5eff9e6a44fe22 /sys | |
parent | 037c6189a59166b4d404ca3b014465dc82ebeeda (diff) |
kernel: Do not treat IPv6 ULA's as GUA's (thanks Arne Meyer)
Diffstat (limited to 'sys')
-rw-r--r-- | sys/src/9/ip/ipifc.c | 5 | ||||
-rw-r--r-- | sys/src/9/ip/ipv6.h | 1 |
2 files changed, 5 insertions, 1 deletions
diff --git a/sys/src/9/ip/ipifc.c b/sys/src/9/ip/ipifc.c index 18d9cfeec..f4786d6fa 100644 --- a/sys/src/9/ip/ipifc.c +++ b/sys/src/9/ip/ipifc.c @@ -70,6 +70,7 @@ enum { unknownv6, /* UGH */ unspecifiedv6, linklocalv6, + ulav6, globalv6, }; @@ -81,6 +82,8 @@ v6addrtype(uchar *addr) else if(islinklocal(addr) || ipcmp(addr, v6loopback) == 0 || isv6mcast(addr) && (addr[1] & 0xF) <= Link_local_scop) return linklocalv6; + else if(isula(addr)) + return ulav6; else return globalv6; } @@ -1218,7 +1221,7 @@ findipifcstr(Fs *f, char *s) } /* - * find "best" (global > link local > unspecified) + * find "best" (global > ula > link local > unspecified) * local address; address must be current. */ static void diff --git a/sys/src/9/ip/ipv6.h b/sys/src/9/ip/ipv6.h index bbf4cacaf..145962b76 100644 --- a/sys/src/9/ip/ipv6.h +++ b/sys/src/9/ip/ipv6.h @@ -16,6 +16,7 @@ */ #define isv6mcast(addr) ((addr)[0] == 0xff) #define islinklocal(addr) ((addr)[0] == 0xfe && ((addr)[1] & 0xc0) == 0x80) +#define isula(addr) ((addr)[0] == 0xfd) #define optexsts(np) (nhgets((np)->ploadlen) > 24) #define issmcast(addr) (memcmp((addr), v6solicitednode, 13) == 0) |