6 v4parseip(uchar *to, char *from)
12 for(i = 0; i < 4 && *p; i++){
13 to[i] = strtoul(p, &p, 0);
18 case 0: /* class A - 1 uchar net */
29 case 2: /* class B - 2 uchar net */
40 parseip(uchar *to, char *from)
42 int i, elipsis = 0, v4 = 1;
46 memset(to, 0, IPaddrlen);
48 for(i = 0; i < 16 && *p; i+=2){
50 x = strtoul(p, &p, 16);
51 if(*p == '.' || (*p == 0 && i == 0)){
52 p = v4parseip(to+i, op);
67 memmove(&to[elipsis+16-i], &to[elipsis], i-elipsis);
68 memset(&to[elipsis], 0, 16-i);
71 to[10] = to[11] = 0xff;
78 * hack to allow ip v4 masks to be entered in the old
82 parseipmask(uchar *to, char *from)
89 /* as a number of prefix bits */
95 memset(to, 0, IPaddrlen);
96 for(p = to; i >= 8; i -= 8)
100 x = nhgetl(to+IPv4off);
102 /* as a straight bit mask */
103 x = parseip(to, from);
104 if(memcmp(to, v4prefix, IPv4off) == 0)
105 memset(to, 0xff, IPv4off);
111 * parse a v4 ip address/mask in cidr format
114 v4parsecidr(uchar *addr, uchar *mask, char *from)
120 p = v4parseip(addr, from);
123 /* as a number of prefix bits */
124 i = strtoul(p+1, &p, 0);
127 memset(mask, 0, IPv4addrlen);
128 for(a = mask; i >= 8; i -= 8)
131 *a = ~((1<<(8-i))-1);
133 memcpy(mask, defmask(addr), IPv4addrlen);