Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Войти
 
Страницы: Пред. 1 2
RSS
iptables-restore - странности в поведении
 
Цитата
SOLDIER пишет:
На данный момент - 91 КБ.
У меня сегодня перевалило за 700К  
 
Вобщем iptables-restore вылетает тут:

Код
iptables-1.2.11/libiptc/libiptc.c:

int
TC_COMMIT(TC_HANDLE_T *handle)
{
...

        if (setsockopt(sockfd, TC_IPPROTO, SO_SET_REPLACE, repl,
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sizeof(*repl)  + (*handle)->entries.size) < 0) {
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;free(repl-&g t;counters);
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;free(repl);
 
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;free(newcoun ters);
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return  0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
...


setsockopt() в Netfilter дает EAGAIN здесь:

Код
/usr/src/linux/net/ipv4/netfilter/ip_tables.c:

static struct ipt_table_info *
replace_table(struct ipt_table *table,
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;  unsigned int num_counters,
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;  struct ipt_table_info *newinfo,
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;  int *error)
{
...
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Do the substitution. */
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; write_lock_bh(&table->lock);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Check inside lock: is the old number correct? */
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (num_counters != table->private->number) {
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;duprintf("num_counters != table->private->number (%u/%u)\n",
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;num_counters, table->private->number);
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_unlock_bh(&table->lock);
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*error = -EAGAIN; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return  NULL;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
...
}


В чем проблема пока неясно, но по сути EAGAIN это некритическая ошибка, требующая повторного обращения к вызванной функции, iptables должен попытаться повторить setsockopt(), получив EAGAIN. Нужно отмылить о баге девелоперам в coreteam@netfilter.org, авось что умное скажут или сплоит на багу, err ну т.е. патчик :), пришлют.
 
2r00t
Где происходит ошибка я выяснил. Хочется понять причину прежде, чем писать об этом разработчикам.
Очень надеюсь, что три выходных дня помогут разобраться в этом

Есть еще один интересный момент. При удачном завершении setsockopt эта же функция вызывается повторно с несколько отличающимся набором параметров. Интересно, что она делает в этом случае. Если первый вызов, по сути, активизирует новые таблицы, то сиысл второго мне пока не совсем ясен. Не исключено, правда, что это активизация второй таблицы (в моем случае NAT).
 
nmalykh
Чем разрешилась проблема? Разработчики пофиксили или нет?
 
Цитата
r00t пишет:
nmalykh
Чем разрешилась проблема? Разработчики пофиксили или нет?
Увы, в ответ на свой отчет, направленный в coreteam больше двух недель назад, я не получил даже подтверждения о доставке :-(
Копать самому сейчас нет времени, да и уровень в C у меня не тот. С корнями проблемы я более или менее разобрался, но для ее решения нужно лезть слишком глубоко.
Страницы: Пред. 1 2
Читают тему