summaryrefslogtreecommitdiff
path: root/lib/fill6bits.c
diff options
context:
space:
mode:
authorCy Schubert <cy@FreeBSD.org>2013-07-19 05:41:57 +0000
committerCy Schubert <cy@FreeBSD.org>2013-07-19 05:41:57 +0000
commitf27f47054d2675045dce8688b408aa9340a118f7 (patch)
tree225b5acf68c01bc6a260b386c2b2dbf4fa2839e3 /lib/fill6bits.c
parent39ff65a633dd44a40233913b84b347003c732868 (diff)
Notes
Diffstat (limited to 'lib/fill6bits.c')
-rw-r--r--lib/fill6bits.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/lib/fill6bits.c b/lib/fill6bits.c
new file mode 100644
index 0000000000000..a5f459a28af0c
--- /dev/null
+++ b/lib/fill6bits.c
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2000-2002 by Darren Reed.
+ *
+ * See the IPFILTER.LICENCE file for details on licencing.
+ *
+ * $Id: fill6bits.c,v 1.5.4.1 2006/06/16 17:20:58 darrenr Exp $
+ */
+
+#include "ipf.h"
+
+
+void fill6bits(bits, msk)
+int bits;
+u_int *msk;
+{
+ if (bits == 0) {
+ msk[0] = 0;
+ msk[1] = 0;
+ msk[2] = 0;
+ msk[3] = 0;
+ return;
+ }
+
+ msk[0] = 0xffffffff;
+ msk[1] = 0xffffffff;
+ msk[2] = 0xffffffff;
+ msk[3] = 0xffffffff;
+
+ if (bits == 128)
+ return;
+ if (bits > 96) {
+ msk[3] = htonl(msk[3] << (128 - bits));
+ } else if (bits > 64) {
+ msk[3] = 0;
+ msk[2] = htonl(msk[2] << (96 - bits));
+ } else if (bits > 32) {
+ msk[3] = 0;
+ msk[2] = 0;
+ msk[1] = htonl(msk[1] << (64 - bits));
+ } else {
+ msk[3] = 0;
+ msk[2] = 0;
+ msk[1] = 0;
+ msk[0] = htonl(msk[0] << (32 - bits));
+ }
+}