Home | History | Annotate | Line # | Download | only in lib
      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 
     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