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