1145519Sdarrenr/*	$FreeBSD$	*/
2145510Sdarrenr
3170268Sdarrenr/*
4255332Scy * Copyright (C) 2012 by Darren Reed.
5255332Scy *
6255332Scy * See the IPFILTER.LICENCE file for details on licencing.
7255332Scy *
8255332Scy * $Id$
9255332Scy */
10170268Sdarrenr
11145510Sdarrenr#include "ipf.h"
12145510Sdarrenr
13255332Scyint ntomask(family, nbits, ap)
14255332Scy	int family, nbits;
15255332Scy	u_32_t *ap;
16145510Sdarrenr{
17145510Sdarrenr	u_32_t mask;
18145510Sdarrenr
19145510Sdarrenr	if (nbits < 0)
20145510Sdarrenr		return -1;
21145510Sdarrenr
22255332Scy	switch (family)
23145510Sdarrenr	{
24255332Scy	case AF_INET :
25255332Scy		if (nbits > 32 || use_inet6 == 1)
26145510Sdarrenr			return -1;
27145510Sdarrenr		if (nbits == 0) {
28145510Sdarrenr			mask = 0;
29145510Sdarrenr		} else {
30145510Sdarrenr			mask = 0xffffffff;
31145510Sdarrenr			mask <<= (32 - nbits);
32145510Sdarrenr		}
33145510Sdarrenr		*ap = htonl(mask);
34145510Sdarrenr		break;
35145510Sdarrenr
36255332Scy	case 0 :
37255332Scy	case AF_INET6 :
38255332Scy		if ((nbits > 128) || (use_inet6 == -1))
39145510Sdarrenr			return -1;
40145510Sdarrenr		fill6bits(nbits, ap);
41145510Sdarrenr		break;
42145510Sdarrenr
43145510Sdarrenr	default :
44145510Sdarrenr		return -1;
45145510Sdarrenr	}
46145510Sdarrenr	return 0;
47145510Sdarrenr}
48