1 /*        $NetBSD: ntomask.c,v 1.2 2012/07/22 14:27:36 darrenr Exp $  */
2 
3 /*
4  * Copyright (C) 2012 by Darren Reed.
5  *
6  * See the IPFILTER.LICENCE file for details on licencing.
7  *
8  * Id: ntomask.c,v 1.1.1.2 2012/07/22 13:44:39 darrenr Exp $
9  */
10 
11 #include "ipf.h"
12 
ntomask(family,nbits,ap)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