For fun, I\'d like to better understand the building blocks or elements that are within an IPv6 address.
Here are the basics, from my understanding:
Obviously this bit is a typo:
it is possible to use double colons syntax to represent one or more blocks with zeroes. 1:2::6:7 is equivalent to 1:2:3:4:5:6:7:8.
1:2::6:7
means 1:2:0:0:0:0:6:7
.
I hadn't heard this before:
double colon may [not appear] within an ip4 dot address.
But I made a test program, and it seems to confirm it.
$ ./testipv6 0:0:0:0:0:0:192.168.0.1
0:0:0:0:0:0:192.168.0.1: OK
$ ./testipv6 0:0:0:0:0:0:192.168::1
0:0:0:0:0:0:192.168::1: ERROR
Otherwise I think everything you said is OK.
testipv6.c
#include
#include
#include
#include
int convert(const char *addr)
{
struct in6_addr dst;
return inet_pton(AF_INET6, addr, (void *)&dst);
}
int main(int argc, char **argv)
{
if (argc == 1) {
fprintf(stderr, "Usage: testipv6 \n");
exit(2);
}
while (argc > 1) {
argc--, argv++;
const char *addr = argv[0];
if (convert(addr)) {
printf("%s: OK\n", addr);
} else {
printf("%s: ERROR\n", addr);
}
}
}