fill6bits.c revision 255332
11195Srgrimes/* $FreeBSD: head/contrib/ipfilter/lib/fill6bits.c 255332 2013-09-06 23:11:19Z cy $ */ 23647Sphk 337Srgrimes/* 437Srgrimes * Copyright (C) 2012 by Darren Reed. 537Srgrimes * 6147Srgrimes * See the IPFILTER.LICENCE file for details on licencing. 7147Srgrimes * 83017Srgrimes * $Id$ 93017Srgrimes */ 103017Srgrimes 113161Sache#include "ipf.h" 123017Srgrimes 133017Srgrimes 141734Sjkhvoid fill6bits(bits, msk) 151734Sjkh int bits; 1637Srgrimes u_int *msk; 1737Srgrimes{ 1837Srgrimes if (bits == 0) { 1937Srgrimes msk[0] = 0; 201773Sjkh msk[1] = 0; 21147Srgrimes msk[2] = 0; 22147Srgrimes msk[3] = 0; 232779Srgrimes return; 242779Srgrimes } 252779Srgrimes 261767Sjkh msk[0] = 0xffffffff; 272570Srgrimes msk[1] = 0xffffffff; 282570Srgrimes msk[2] = 0xffffffff; 292570Srgrimes msk[3] = 0xffffffff; 302570Srgrimes 312570Srgrimes if (bits == 128) 322570Srgrimes return; 332570Srgrimes if (bits > 96) { 342570Srgrimes msk[3] = htonl(msk[3] << (128 - bits)); 351782Sjkh } else if (bits > 64) { 361782Sjkh msk[3] = 0; 37491Srgrimes msk[2] = htonl(msk[2] << (96 - bits)); 3837Srgrimes } else if (bits > 32) { 3937Srgrimes msk[3] = 0; 4037Srgrimes msk[2] = 0; 4137Srgrimes msk[1] = htonl(msk[1] << (64 - bits)); 4237Srgrimes } else { 43263Srgrimes msk[3] = 0; 442779Srgrimes msk[2] = 0; 452779Srgrimes msk[1] = 0; 46993Srgrimes msk[0] = htonl(msk[0] << (32 - bits)); 47277Srgrimes } 482779Srgrimes} 49284Srgrimes