141edb306SCy Schubert 241edb306SCy Schubert /* 341edb306SCy Schubert * Copyright (C) 2012 by Darren Reed. 441edb306SCy Schubert * 541edb306SCy Schubert * See the IPFILTER.LICENCE file for details on licencing. 641edb306SCy Schubert * 741edb306SCy Schubert * $Id$ 841edb306SCy Schubert */ 941edb306SCy Schubert 1041edb306SCy Schubert #include "ipf.h" 1141edb306SCy Schubert 1241edb306SCy Schubert 13*efeb8bffSCy Schubert void fill6bits(int bits,u_int * msk)14*efeb8bffSCy Schubertfill6bits(int bits, u_int *msk) 1541edb306SCy Schubert { 1641edb306SCy Schubert if (bits == 0) { 1741edb306SCy Schubert msk[0] = 0; 1841edb306SCy Schubert msk[1] = 0; 1941edb306SCy Schubert msk[2] = 0; 2041edb306SCy Schubert msk[3] = 0; 2141edb306SCy Schubert return; 2241edb306SCy Schubert } 2341edb306SCy Schubert 2441edb306SCy Schubert msk[0] = 0xffffffff; 2541edb306SCy Schubert msk[1] = 0xffffffff; 2641edb306SCy Schubert msk[2] = 0xffffffff; 2741edb306SCy Schubert msk[3] = 0xffffffff; 2841edb306SCy Schubert 2941edb306SCy Schubert if (bits == 128) 3041edb306SCy Schubert return; 3141edb306SCy Schubert if (bits > 96) { 3241edb306SCy Schubert msk[3] = htonl(msk[3] << (128 - bits)); 3341edb306SCy Schubert } else if (bits > 64) { 3441edb306SCy Schubert msk[3] = 0; 3541edb306SCy Schubert msk[2] = htonl(msk[2] << (96 - bits)); 3641edb306SCy Schubert } else if (bits > 32) { 3741edb306SCy Schubert msk[3] = 0; 3841edb306SCy Schubert msk[2] = 0; 3941edb306SCy Schubert msk[1] = htonl(msk[1] << (64 - bits)); 4041edb306SCy Schubert } else { 4141edb306SCy Schubert msk[3] = 0; 4241edb306SCy Schubert msk[2] = 0; 4341edb306SCy Schubert msk[1] = 0; 4441edb306SCy Schubert msk[0] = htonl(msk[0] << (32 - bits)); 4541edb306SCy Schubert } 4641edb306SCy Schubert } 47