fill6bits.c revision 145519
1145519Sdarrenr/*	$FreeBSD: head/contrib/ipfilter/lib/fill6bits.c 145519 2005-04-25 18:20:15Z darrenr $	*/
2145510Sdarrenr
3145510Sdarrenr/*
4145510Sdarrenr * Copyright (C) 1993-2001 by Darren Reed.
5145510Sdarrenr *
6145510Sdarrenr * See the IPFILTER.LICENCE file for details on licencing.
7145510Sdarrenr *
8145510Sdarrenr * Id: fill6bits.c,v 1.5 2002/03/27 15:09:57 darrenr Exp
9145510Sdarrenr */
10145510Sdarrenr
11145510Sdarrenr#include "ipf.h"
12145510Sdarrenr
13145510Sdarrenr
14145510Sdarrenrvoid fill6bits(bits, msk)
15145510Sdarrenrint bits;
16145510Sdarrenru_int *msk;
17145510Sdarrenr{
18145510Sdarrenr	if (bits == 0) {
19145510Sdarrenr		msk[0] = 0;
20145510Sdarrenr		msk[1] = 0;
21145510Sdarrenr		msk[2] = 0;
22145510Sdarrenr		msk[3] = 0;
23145510Sdarrenr		return;
24145510Sdarrenr	}
25145510Sdarrenr
26145510Sdarrenr	msk[0] = 0xffffffff;
27145510Sdarrenr	msk[1] = 0xffffffff;
28145510Sdarrenr	msk[2] = 0xffffffff;
29145510Sdarrenr	msk[3] = 0xffffffff;
30145510Sdarrenr
31145510Sdarrenr	if (bits == 128)
32145510Sdarrenr		return;
33145510Sdarrenr	if (bits > 96) {
34145510Sdarrenr		msk[3] = htonl(msk[3] << (128 - bits));
35145510Sdarrenr	} else if (bits > 64) {
36145510Sdarrenr		msk[3] = 0;
37145510Sdarrenr		msk[2] = htonl(msk[2] << (96 - bits));
38145510Sdarrenr	} else if (bits > 32) {
39145510Sdarrenr		msk[3] = 0;
40145510Sdarrenr		msk[2] = 0;
41145510Sdarrenr		msk[1] = htonl(msk[1] << (64 - bits));
42145510Sdarrenr	} else {
43145510Sdarrenr		msk[3] = 0;
44145510Sdarrenr		msk[2] = 0;
45145510Sdarrenr		msk[1] = 0;
46145510Sdarrenr		msk[0] = htonl(msk[0] << (32 - bits));
47145510Sdarrenr	}
48145510Sdarrenr}
49