34 static int charcount(
char *s,
int c);
77 memset(&ipv6, 0,
sizeof (ipv6));
81 memset(sout, 0, size);
82 for (i = 0; i < 16; i++)
86 snprintf(buf,
sizeof (buf),
"%x", ipv6.
addr[i]);
107 memset(addr, 0,
sizeof (*addr));
111 p = strstr(sin,
"::");
132 u = strtoul(p, &ptr, 16);
164 i = charcount(p,
':');
165 n = 16 - 2 * (i + 1);
180 u = strtoul(p, NULL, 10);
188 for (i = 0; i < addr->
prefix; i++)
195 if (i < addr->prefix)
196 addr->
mask[io] |= 1 << ip;
222 for (i = 0; i < 8; i++)
226 if (strlen(sout) > 0)
228 m = ((int) addr->
addr[2 * i]) << 8 | ((int) addr->
addr[2 * i + 1]);
230 snprintf(tmp,
sizeof (tmp),
"%x", m);
233 snprintf(tmp,
sizeof (tmp),
"/%d", addr->
prefix);
252 memset(addr->
mask, 0, sizeof (addr->
mask));
253 for (i = 0; i < prefix; i++)
261 addr->
mask[io] |= 1 << ip;
281 for (i = 0; i < 16; i++)
299 ASSERT(buf != NULL && size > 0);
318 for (n = 0; s != NULL && *s !=
'\0' && (s =
strchr(s, c)) != NULL; s++)
bool ipv6_check_net(ipv6_T *net, ipv6_T *addr)
bool ipv6_cmp(ipv6_T *a, ipv6_T *b)
void ipv6_set_prefix(ipv6_T *addr, int prefix)
bool ipv6_str2rec(ipv6_T *addr, char *sin)
void ipv6_expand(char *sout, char *sin, size_t size)
#define ZE_MessageWarning(level,...)
void ipv6_subnet(ipv6_T *net, ipv6_T *addr)
void ipv6_prefix_str(ipv6_T *addr, char *buf, size_t size, int n)
void ipv6_rec2str(char *sout, ipv6_T *addr, size_t sz)