1*0Sstevel@tonic-gate #include "ipf.h"
2*0Sstevel@tonic-gate 
3*0Sstevel@tonic-gate int ntomask(v, nbits, ap)
4*0Sstevel@tonic-gate int v, nbits;
5*0Sstevel@tonic-gate u_32_t *ap;
6*0Sstevel@tonic-gate {
7*0Sstevel@tonic-gate 	u_32_t mask;
8*0Sstevel@tonic-gate 
9*0Sstevel@tonic-gate 	if (nbits < 0)
10*0Sstevel@tonic-gate 		return -1;
11*0Sstevel@tonic-gate 
12*0Sstevel@tonic-gate 	switch (v)
13*0Sstevel@tonic-gate 	{
14*0Sstevel@tonic-gate 	case 4 :
15*0Sstevel@tonic-gate 		if (nbits > 32 || use_inet6 != 0)
16*0Sstevel@tonic-gate 			return -1;
17*0Sstevel@tonic-gate 		if (nbits == 0) {
18*0Sstevel@tonic-gate 			mask = 0;
19*0Sstevel@tonic-gate 		} else {
20*0Sstevel@tonic-gate 			mask = 0xffffffff;
21*0Sstevel@tonic-gate 			mask <<= (32 - nbits);
22*0Sstevel@tonic-gate 		}
23*0Sstevel@tonic-gate 		*ap = htonl(mask);
24*0Sstevel@tonic-gate 		break;
25*0Sstevel@tonic-gate 
26*0Sstevel@tonic-gate 	case 6 :
27*0Sstevel@tonic-gate 		if ((nbits > 128) || (use_inet6 == 0))
28*0Sstevel@tonic-gate 			return -1;
29*0Sstevel@tonic-gate 		fill6bits(nbits, ap);
30*0Sstevel@tonic-gate 		break;
31*0Sstevel@tonic-gate 
32*0Sstevel@tonic-gate 	default :
33*0Sstevel@tonic-gate 		return -1;
34*0Sstevel@tonic-gate 	}
35*0Sstevel@tonic-gate 	return 0;
36*0Sstevel@tonic-gate }
37