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