xref: /freebsd/sbin/ipf/libipf/ntomask.c (revision 6378393308bc6bd81fb871dacf6b03cf1a390d8b)
1 /*	$FreeBSD$	*/
2 
3 /*
4  * Copyright (C) 2012 by Darren Reed.
5  *
6  * See the IPFILTER.LICENCE file for details on licencing.
7  *
8  * $Id$
9  */
10 
11 #include "ipf.h"
12 
13 int ntomask(family, nbits, ap)
14 	int family, nbits;
15 	u_32_t *ap;
16 {
17 	u_32_t mask;
18 
19 	if (nbits < 0)
20 		return -1;
21 
22 	switch (family)
23 	{
24 	case AF_INET :
25 		if (nbits > 32 || use_inet6 == 1)
26 			return -1;
27 		if (nbits == 0) {
28 			mask = 0;
29 		} else {
30 			mask = 0xffffffff;
31 			mask <<= (32 - nbits);
32 		}
33 		*ap = htonl(mask);
34 		break;
35 
36 	case 0 :
37 	case AF_INET6 :
38 		if ((nbits > 128) || (use_inet6 == -1))
39 			return -1;
40 		fill6bits(nbits, ap);
41 		break;
42 
43 	default :
44 		return -1;
45 	}
46 	return 0;
47 }
48