summaryrefslogtreecommitdiffstats
path: root/lib/fill6bits.c
diff options
context:
space:
mode:
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 0000000..a5f459a
--- /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));
+ }
+}
OpenPOWER on IntegriCloud