Ключевые слова:traffic, ipcad, patch, (найти похожие документы)
From: Maxim Chirkov <mc@tyumen.ru.>
Date: Mon, 29 Jan 2006 18:21:07 +0000 (UTC)
Subject: Патч для ipcad, решающий проблемы с алиасами интерфейсов
Оригинал: http://www.opennet.me/openforum/vsluhforumID3/13280.html
У ipcad есть одна логичная, но ощущаемая через наступание на
грабли, особенность. Если интерфейсы выбираются по маске (например,
"vlan*") и для некоторых из них есть алиасы, то для них трафик
будет посчитан в N раз больше, т.е. для каждого алиаса в логах
будет дубликат данных.
Для обхода проблемы был создан небольшой патч (отправлен автору
ipcad, но похоже где-то затерялся), вместо звездочки вводящий более
строгую маску (например, vlan[0-9][0-9][0-9][0-9]),
т.е. для примера "vlan0301:1" будет отброшен.
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;