]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - contrib/ipfilter/lib/ntomask.c
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / contrib / ipfilter / lib / ntomask.c
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 }