Пример #1
0
static int
mask2len(const unsigned char *p, const int size)
{
    int i = 0, j;

    for(j = 0; j < size; j++, p++) {
        if(*p != 0xff)
            break;
        i += 8;
    }
    if(j < size) {
        switch(*p) {
#define	MASKLEN(m, l)	case m: do { i += l; break; } while (0)
            MASKLEN(0xfe, 7); break;
            MASKLEN(0xfc, 6); break;
            MASKLEN(0xf8, 5); break;
            MASKLEN(0xf0, 4); break;
            MASKLEN(0xe0, 3); break;
            MASKLEN(0xc0, 2); break;
            MASKLEN(0x80, 1); break;
#undef	MASKLEN
        }
    }
    return i;
}
Пример #2
0
static int
mask_bits(u_char *m_ad, int m_len)
{
	int h_num = 0,i;

	for (i = 0; i < m_len; i++, m_ad++) {
		if (*m_ad != 0xff)
			break;
		h_num += 8;
	}
	if (i < m_len) {
		switch (*m_ad) {
#define	MASKLEN(m, l)	case m: h_num += l; break
		MASKLEN(0xfe, 7);
		MASKLEN(0xfc, 6);
		MASKLEN(0xf8, 5);
		MASKLEN(0xf0, 4);
		MASKLEN(0xe0, 3);
		MASKLEN(0xc0, 2);
		MASKLEN(0x80, 1);
#undef	MASKLEN
		}
	}
	return h_num;
}
Пример #3
0
int
mask2len(const struct in6_addr *addr)
{
    int i = 0, j;
    const u_char *p = (const u_char *)addr;

    for(j = 0; j < 16; j++, p++) {
        if(*p != 0xff)
            break;
        i += 8;
    }
    if(j < 16) {
        switch(*p) {
#define	MASKLEN(m, l)	case m: do { i += l; break; } while (0)
            MASKLEN(0xfe, 7); break;
            MASKLEN(0xfc, 6); break;
            MASKLEN(0xf8, 5); break;
            MASKLEN(0xf0, 4); break;
            MASKLEN(0xe0, 3); break;
            MASKLEN(0xc0, 2); break;
            MASKLEN(0x80, 1); break;
#undef	MASKLEN
        }
    }
    return i;
}