У ipcad есть одна логичная, но ощущаемая через наступания на грабли, особенность. Если интерфейсы выбираются по маске (например, "vlan*") и для некоторых из них есть алиасы, то для них трафика будет посчитан в N раз больше, т.е. для каждого алиасы в логах будет дубликат данных. Для обхода проблемы был создан небольшой патч (отправлен автору ipcad, но похоже где-то затерялся), вместо звездочки вводящий более строгую маску (например, vlan[0-9][0-9][0-9][0-0]):diff -u --recursive --new-file ipcad-3.6.6/cfglex.l ipcad-3.6.6-new/cfglex.l --- ipcad-3.6.6/cfglex.l 2005-03-22 14:57:25 +0500 +++ ipcad-3.6.6-new/cfglex.l 2005-08-08 16:45:56 +0600 @@ -66,7 +66,7 @@ ipcacfglval.tv_char = strdup(yytext); return TOK_STRING; } - [a-z]+[_0-9*]* { + [a-z]+[_0-9\*\[\]\-]* { ipcacfglval.tv_char = strdup(yytext); return TOK_STRING; } diff -u --recursive --new-file ipcad-3.6.6/headers.h ipcad-3.6.6-new/headers.h --- ipcad-3.6.6/headers.h 2005-03-22 14:57:25 +0500 +++ ipcad-3.6.6-new/headers.h 2005-08-08 17:09:49 +0600 @@ -251,4 +251,7 @@ #define MIN(a,b) ((a)<(b)?(a):(b)) #endif /* MIN */ +#undef IFNAMSIZ +#define IFNAMSIZ 32 + #endif /* __HEADERS_H__ */ diff -u --recursive --new-file ipcad-3.6.6/psrc.c ipcad-3.6.6-new/psrc.c --- ipcad-3.6.6/psrc.c 2005-03-22 14:57:25 +0500 +++ ipcad-3.6.6-new/psrc.c 2005-08-08 17:02:03 +0600 @@ -62,11 +62,12 @@ /* * Initialize packet source descriptors. */ - if(strchr(ifname, '*')) { +// if(strchr(ifname, '*')) { + if(strchr(ifname, '*') != NULL || strchr(ifname, '[') != NULL){ /* * The interface does not exist, so it might be dynamic. */ - fprintf(stderr, "[DYNAMIC] "); + fprintf(stderr, "[DYNAMIC] /%s/ ", ps->ifName); ps->process_ptr = process_dynamic; ps->print_stats = print_stats_dynamic; ps->iface_type = IFACE_DYNAMIC;
|