xref: /netbsd-src/external/bsd/ipf/dist/lib/fill6bits.c (revision 13885a665959c62f13a82b3caedf986eaa17aa31)
1*13885a66Sdarrenr /*	$NetBSD: fill6bits.c,v 1.2 2012/07/22 14:27:36 darrenr Exp $	*/
2bc4097aaSchristos 
3bc4097aaSchristos /*
4c9d5dc6cSdarrenr  * Copyright (C) 2012 by Darren Reed.
5bc4097aaSchristos  *
6bc4097aaSchristos  * See the IPFILTER.LICENCE file for details on licencing.
7bc4097aaSchristos  *
8*13885a66Sdarrenr  * Id: fill6bits.c,v 1.1.1.2 2012/07/22 13:44:38 darrenr Exp $
9bc4097aaSchristos  */
10bc4097aaSchristos 
11bc4097aaSchristos #include "ipf.h"
12bc4097aaSchristos 
13bc4097aaSchristos 
fill6bits(bits,msk)14bc4097aaSchristos void fill6bits(bits, msk)
15bc4097aaSchristos 	int bits;
16bc4097aaSchristos 	u_int *msk;
17bc4097aaSchristos {
18bc4097aaSchristos 	if (bits == 0) {
19bc4097aaSchristos 		msk[0] = 0;
20bc4097aaSchristos 		msk[1] = 0;
21bc4097aaSchristos 		msk[2] = 0;
22bc4097aaSchristos 		msk[3] = 0;
23bc4097aaSchristos 		return;
24bc4097aaSchristos 	}
25bc4097aaSchristos 
26bc4097aaSchristos 	msk[0] = 0xffffffff;
27bc4097aaSchristos 	msk[1] = 0xffffffff;
28bc4097aaSchristos 	msk[2] = 0xffffffff;
29bc4097aaSchristos 	msk[3] = 0xffffffff;
30bc4097aaSchristos 
31bc4097aaSchristos 	if (bits == 128)
32bc4097aaSchristos 		return;
33bc4097aaSchristos 	if (bits > 96) {
34bc4097aaSchristos 		msk[3] = htonl(msk[3] << (128 - bits));
35bc4097aaSchristos 	} else if (bits > 64) {
36bc4097aaSchristos 		msk[3] = 0;
37bc4097aaSchristos 		msk[2] = htonl(msk[2] << (96 - bits));
38bc4097aaSchristos 	} else if (bits > 32) {
39bc4097aaSchristos 		msk[3] = 0;
40bc4097aaSchristos 		msk[2] = 0;
41bc4097aaSchristos 		msk[1] = htonl(msk[1] << (64 - bits));
42bc4097aaSchristos 	} else {
43bc4097aaSchristos 		msk[3] = 0;
44bc4097aaSchristos 		msk[2] = 0;
45bc4097aaSchristos 		msk[1] = 0;
46bc4097aaSchristos 		msk[0] = htonl(msk[0] << (32 - bits));
47bc4097aaSchristos 	}
48bc4097aaSchristos }
49