On Mon, Dec 23, 2002 at 03:09:09PM +0200, Alex Radetsky wrote:
On Mon, Dec 23, 2002 at 03:48:54PM +0300, Alexandre Snarskii wrote:
Угу. Для одной сети он работает даже вполне хорошо, Для чего и писалось. ;)
хотя я реализовывал такую функцию и побыстрее :)) Кардинально другой алгоритм? Или просто оптимизация похожего?
Представим себе, что у нас есть network и masklen, на вложенность в которую нужно проверить. Тогда, /* shift на 32 разряда на 32-bit регистрах не работает */ uint32_t mask=(masklen==0)?0:htonl(0xffffffffl<<(32-masklen)); if(network!=(network&masklen)) { printf("inconsistent address&masklen\n"); return -1; }; if(src_ip&mask==network) return 1; if(dst_ip&mask==network) return 1; return 0; Это из головы, а не из рабочего кода, так что... However, работает быстрее твоего (в части сравнения, parsing не считаем) раза в два-три быстрее. =================================================================== uanog mailing list. To Unsubscribe: send mail to majordomo@uanog.kiev.ua with "unsubscribe uanog" in the body of the message