This corrects ipv6.h to recognise global addresses as starting with the byte 0x20 instead of 0x02. I've tested it; it works. Reference: /n/sources/patch/applied/ipv6-through-gw Date: Wed Jun 16 19:17:30 CES 2004 --- /sys/src/9/ip/ipv6.h Wed Jun 16 19:17:30 2004 +++ /sys/src/9/ip/ipv6.h Wed Jun 16 19:17:30 2004 @@ -2,7 +2,7 @@ #define isv6mcast(addr) ((addr)[0] == 0xff) #define islinklocal(addr) ( ((addr)[0] == 0xfe) && ((addr)[1] == 0x80) ) #define issitelocal(addr) ( ((addr)[0] == 0xfe) && ((addr)[1] == 0xc0) ) -#define isv6global(addr) ( (addr)[0] == 0x2 ) +#define isv6global(addr) ( (addr)[0] == 0x20 ) #define optexsts(np) (nhgets((np)->ploadlen) > 24) #define issmcast(addr) (memcmp((addr), v6solicitednode, 13) == 0)