summaryrefslogtreecommitdiffstats
path: root/contrib/ipfilter/lib/ntomask.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/ipfilter/lib/ntomask.c')
-rw-r--r--contrib/ipfilter/lib/ntomask.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/contrib/ipfilter/lib/ntomask.c b/contrib/ipfilter/lib/ntomask.c
new file mode 100644
index 0000000..98e3b26
--- /dev/null
+++ b/contrib/ipfilter/lib/ntomask.c
@@ -0,0 +1,47 @@
+/* $FreeBSD$ */
+
+/*
+ * Copyright (C) 2012 by Darren Reed.
+ *
+ * See the IPFILTER.LICENCE file for details on licencing.
+ *
+ * $Id$
+ */
+
+#include "ipf.h"
+
+int ntomask(family, nbits, ap)
+ int family, nbits;
+ u_32_t *ap;
+{
+ u_32_t mask;
+
+ if (nbits < 0)
+ return -1;
+
+ switch (family)
+ {
+ case AF_INET :
+ if (nbits > 32 || use_inet6 == 1)
+ return -1;
+ if (nbits == 0) {
+ mask = 0;
+ } else {
+ mask = 0xffffffff;
+ mask <<= (32 - nbits);
+ }
+ *ap = htonl(mask);
+ break;
+
+ case 0 :
+ case AF_INET6 :
+ if ((nbits > 128) || (use_inet6 == -1))
+ return -1;
+ fill6bits(nbits, ap);
+ break;
+
+ default :
+ return -1;
+ }
+ return 0;
+}
OpenPOWER on IntegriCloud