+static int match_binary(char *b1, char *b2, char *mask, int addrlen)
+{
+ int i;
+
+ for (i=0; i<addrlen; i++) {
+ if ((b1[i]^b2[i])&mask[i]) {
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
+static void make_mask(char *mask, int plen, int addrlen) {
+ int w, b;
+
+ w = plen >> 3;
+ b = plen & 0x7;
+
+ if (w)
+ memset(mask, 0xff, w);
+ if (w < addrlen)
+ mask[w] = 0xff & (0xff<<(8-b));
+ if (w+1 < addrlen)
+ memset(mask+w+1, 0, addrlen-w-1);
+
+ return;
+}