ntomask.c revision 170268
1145519Sdarrenr/* $FreeBSD: head/contrib/ipfilter/lib/ntomask.c 170268 2007-06-04 02:54:36Z darrenr $ */ 2145510Sdarrenr 3170268Sdarrenr/* 4170268Sdarrenr * Copyright (C) 2002-2005 by Darren Reed. 5170268Sdarrenr * 6170268Sdarrenr * See the IPFILTER.LICENCE file for details on licencing. 7170268Sdarrenr * 8170268Sdarrenr * $Id: ntomask.c,v 1.6.2.1 2006/06/16 17:21:07 darrenr Exp $ 9170268Sdarrenr */ 10170268Sdarrenr 11145510Sdarrenr#include "ipf.h" 12145510Sdarrenr 13145510Sdarrenrint ntomask(v, nbits, ap) 14145510Sdarrenrint v, nbits; 15145510Sdarrenru_32_t *ap; 16145510Sdarrenr{ 17145510Sdarrenr u_32_t mask; 18145510Sdarrenr 19145510Sdarrenr if (nbits < 0) 20145510Sdarrenr return -1; 21145510Sdarrenr 22145510Sdarrenr switch (v) 23145510Sdarrenr { 24145510Sdarrenr case 4 : 25145510Sdarrenr if (nbits > 32 || use_inet6 != 0) 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 36145510Sdarrenr case 6 : 37145510Sdarrenr if ((nbits > 128) || (use_inet6 == 0)) 38145510Sdarrenr return -1; 39145510Sdarrenr fill6bits(nbits, ap); 40145510Sdarrenr break; 41145510Sdarrenr 42145510Sdarrenr default : 43145510Sdarrenr return -1; 44145510Sdarrenr } 45145510Sdarrenr return 0; 46145510Sdarrenr} 47