177 |
} |
} |
178 |
#endif |
#endif |
179 |
|
|
180 |
|
int |
181 |
|
ip_getnetaddr(char *str, NETDEF *netdef) |
182 |
|
{ |
183 |
|
char *p = strchr(str, '/'); |
184 |
|
if (!p) { |
185 |
|
netdef->netmask = 0xfffffffful; |
186 |
|
netdef->ipaddr = ip_gethostaddr(str); |
187 |
|
} else { |
188 |
|
char buf[DOTTED_QUAD_LEN]; |
189 |
|
size_t len = p - str; |
190 |
|
|
191 |
|
if (len >= DOTTED_QUAD_LEN) |
192 |
|
return 1; |
193 |
|
memcpy(buf, str, len); |
194 |
|
buf[len] = 0; |
195 |
|
netdef->ipaddr = ip_strtoip(buf); |
196 |
|
|
197 |
|
if (good_ipaddr(p+1) == 0) |
198 |
|
netdef->netmask = ip_strtoip(p+1); |
199 |
|
else { |
200 |
|
char *endp; |
201 |
|
UINT4 n = strtoul(p+1, &endp, 0); |
202 |
|
if (*endp || n > 32) |
203 |
|
return 1; |
204 |
|
n = 32 - n; |
205 |
|
if (n == 32) |
206 |
|
netdef->netmask = 0; |
207 |
|
else |
208 |
|
netdef->netmask = (0xfffffffful >> n) << n; |
209 |
|
} |
210 |
|
} |
211 |
|
return 0; |
212 |
|
} |
213 |
|
|
214 |
|
int |
215 |
|
ip_addr_in_net_p(NETDEF *netdef, UINT4 ipaddr) |
216 |
|
{ |
217 |
|
return netdef->ipaddr == (ipaddr & netdef->netmask); |
218 |
|
} |