Отправляет email-рассылки с помощью сервиса Sendsay

iptables make: syntax error before '*' token

Доброго времени суток.

Ситуация такая - при компиляции iptables-1.2.10 выдает следующую ошибку:

[rygoravich@rygoravich iptables-1.2.10]$ make
Extensions found: IPv4:recent IPv6:ah IPv6:esp IPv6:frag IPv6:ipv6header IPv6:hbh
IPv6:dst IPv6:rt
cc -O2 -Wall -Wunused -I/usr/src/linux/include -Iinclude/ -DIPTABLES_VERSION=\"1.2.10\"
-fPIC -o extensions/libipt_ah_sh.o -c extensions/libipt_ah.c
In file included from include/libiptc/libiptc.h:6,
from include/iptables.h:5,
from extensions/libipt_ah.c:8:
/usr/src/linux/include/linux/netfilter_ipv4/ip_tables.h:255: warning: no semicolon
at end of struct or union
/usr/src/linux/include/linux/netfilter_ipv4/ip_tables.h:255: error: syntax error
before '*' token
/usr/src/linux/include/linux/netfilter_ipv4/ip_tables.h:259: error: syntax error
before '}' token
/usr/src/linux/include/linux/netfilter_ipv4/ip_tables.h:339: warning: type defaults
to `int' in declaration of `DECLARE_MUTEX'
/usr/src/linux/include/linux/netfilter_ipv4/ip_tables.h:339: warning: parameter
names (without types) in function declaration
/usr/src/linux/include/linux/netfilter_ipv4/ip_tables.h:339: warning: `DECLARE_MUTEX'
declared `static' but never defined
make: *** [extensions/libipt_ah_sh.o] Ошибка 1
[rygoravich@rygoravich iptables-1.2.10]$

Дистрибутив Mandrake 9.2, ядро 2.6.7. Кусок /usr/src/linux/include/linux/netfilter_ipv4/ip_tables.h:

struct ipt_replace
{
/* Which table. */
char name[IPT_TABLE_MAXNAMELEN];

/* Which hook entry points are valid: bitmask. You can't
change this. */
unsigned int valid_hooks;

/* Number of entries */
unsigned int num_entries;

/* Total size of new entries */
unsigned int size;

/* Hook entry points. */
unsigned int hook_entry[NF_IP_NUMHOOKS];

/* Underflow points. */
unsigned int underflow[NF_IP_NUMHOOKS];

/* Information about old entries: */
/* Number of counters (must be equal to current number of entries). */
unsigned int num_counters;
/* The old entries' counters. */
struct ipt_counters __user *counters; // 255-ая строка

/* The entries (hang off end: not really an array). */
struct ipt_entry entries[0];
}; // 259-ая строка

В чем может быть трабла?

Ответить   Sat, 25 Dec 2004 12:09:41 +0200 (#286686)

 

Ответы:

Здравствуйте, Rygoravich.

Вы писали 25 декабря 2004 г., 13:09:41:

Доброго.

error

error

^^^^^^^

Возможно здесь не должно быть пробела.

Ответить   "Andrey I. Klaus" Sat, 25 Dec 2004 13:33:02 +0300 (#286741)

 

Доброго времени суток.

On Sat, 25 Dec 2004 13:33:02 +0300
"Andrey I. Klaus" <akla***@l*****.ru> wrote:

Спасибо, помогло, но ненадолго... Та же самую ошибка обнаружилась еще и в /usr/src/linux/include/linux/netfilter_ipv6/ip6_tables.h
(та же самая строка), после исправления ее выдает новую ошибку:

/usr/src/linux/include/linux/netfilter_ipv4/ip_tables.h:339: warning: type defaults
to `int' in declaration of `DECLARE_MUTEX'
/usr/src/linux/include/linux/netfilter_ipv4/ip_tables.h:339: warning: parameter
names (without types) in function declaration
/usr/src/linux/include/linux/netfilter_ipv4/ip_tables.h:339: warning: `DECLARE_MUTEX'
declared `static' but never defined
cc -O2 -Wall -Wunused -I/usr/src/linux/include -Iinclude/ -DIPTABLES_VERSION=\"1.2.10\"
-c -o libiptc/libip4tc.o libiptc/libip4tc.c
In file included from include/libiptc/libiptc.h:6,
from libiptc/libip4tc.c:29:
/usr/src/linux/include/linux/netfilter_ipv4/ip_tables.h:339: warning: type defaults
to `int' in declaration of `DECLARE_MUTEX'
/usr/src/linux/include/linux/netfilter_ipv4/ip_tables.h:339: warning: parameter
names (without types) in function declaration
In file included from libiptc/libip4tc.c:116:
libiptc/libiptc.c: In function `iptc_commit':
libiptc/libiptc.c:1809: error: invalid use of undefined type `struct ipt_counters__user'
libiptc/libiptc.c:1809: error: dereferencing pointer to incomplete type
libiptc/libiptc.c:1821: error: invalid use of undefined type `struct ipt_counters__user'
libiptc/libiptc.c:1821: error: dereferencing pointer to incomplete type
libiptc/libiptc.c: At top level:
/usr/src/linux/include/linux/netfilter_ipv4/ip_tables.h:339: warning: `DECLARE_MUTEX'
declared `static' but never defined
make: *** [libiptc/libip4tc.o] Ошибка 1
[rygoravich@rygoravich iptables-1.2.10]$

Кусок /usr/src/iptables-1.2.10/libiptc/libiptc.c (строки пронумерованы):

1790 /* Put counters back. */
1791 strcpy(newcounters->name, (*handle)->info.name);
1792 newcounters->num_counters = (*handle)->new_number;
1793 for (i = 0; i < (*handle)->new_number; i++) {
1794 unsigned int mappos = (*handle)->counter_map[i].mappos;
1795 switch ((*handle)->counter_map[i].maptype) {
1796 case COUNTER_MAP_NOMAP:
1797 newcounters->counters[i]
1798 = ((STRUCT_COUNTERS){ 0, 0 });
1799 break;
1800
1801 case COUNTER_MAP_NORMAL_MAP:
1802 /* Original read: X.
1803 * Atomic read on replacement: X + Y.
1804 * Currently in kernel: Z.
1805 * Want in kernel: X + Y + Z.
1806 * => Add in X + Y
1807 * => Add in replacement read.
1808 */
1809 newcounters->counters[i] = repl->counters[mappos];
1810 break;
1811
1812 case COUNTER_MAP_ZEROED:
1813 /* Original read: X.
1814 * Atomic read on replacement: X + Y.
1815 * Currently in kernel: Z.
1816 * Want in kernel: Y + Z.
1817 * => Add in Y.
1818 * => Add in (replacement read - original read).
1819 */
1820 subtract_counters(&newcounters->counters[i],
1821 &repl->counters[mappos],
1822 &index2entry(*handle, i)->counters);
1823 break;
1824
1825 case COUNTER_MAP_SET:
1826 /* Want to set counter (iptables-restore) */
1827
1828 memcpy(&newcounters->counters[i],
1829 &index2entry(*handle, i)->counters,
1830 sizeof(STRUCT_COUNTERS));
1831
1832 break;
1833 }
1834 }

Так вот что-то я никак не пойму - это столько ошибок в стабильном ядре с kernel.org???

Ответить   Sun, 26 Dec 2004 08:45:43 +0200 (#287039)

 

Скорее, нужно посмотреть, где объявлено __user. Включить этот файл в исходники

(#include <>).
Если нигде не объявлено, нужно поместить
#define __user
в начало .c файла, который включает проблемный .h.

Rygoravich wrote:

Не думаю. Компилятор говорит, что __user - уже имя поля, поэтому * после него

- нарушение синтаксиса, нужно ; .

Хмммм.. Не в ядре, а в iptables... Пропустили какой-то .h файл.
Или, может, ему нужен gcc посвежее. Или конфигурационная проблема.

Ответить   Dmitry Kostenko Mon, 27 Dec 2004 11:20:45 +0200 (#287376)

 

Доброго времени суток.

On Mon, 27 Dec 2004 11:20:45 +0200
Dmitry Kostenko <bis***@m*****.ru> wrote:

Фишка в том, что этих файлов 85 штук...
А вообще, заметил такую фишку - похоже, файл /usr/src/linux/include/linux/netfilter_ipv4/ip_tables.h
включается строкой
#include <iptables.h>
после чего и создает проблемы, хотя есть файл с названием iptables.h в каталоге
/usr/src/iptables-1.2.10/include. В то же время в некоторых файлах имеются и
строки
#include <linux/netfilter_ipv4/ip_tables.h>

Не может ли быть трабла в том, что компилятор включает не тот файл, который нужен?
И если так - как ему объяснить, какой файл нужно включать?

Пробовал версию 1.2.8 - та же фишка... Хотя именно 1.2.8 поставляется в дистрибутиве
уже скомпиленная...

Ответить   Tue, 28 Dec 2004 08:40:21 +0200 (#287841)

 

ip_tables.h включается из iptables.h (косвенно), поэтому должно быть
достаточно добавить #define __user начало iptables.h.

P.S. Неужели нигде нет объявления __user?

Rygoravich wrote:

и

нужен?

Ответить   Dmitry Kostenko Tue, 28 Dec 2004 11:00:04 +0200 (#287896)

 

Доброго времени суток.

On Tue, 28 Dec 2004 11:00:04 +0200
Dmitry Kostenko <bis***@m*****.ru> wrote:

Спасибо, на поверку включение ip_tables.h оказалось в libip6tc.h, после добавления
сей строки все скомпилилось нормально:). Проблема решилась:).

Ээ, может быть я просто не так искал... В исходниках iptables - нет ни одного
упоминания о __user, а в ядре их слишком много... Не зная, как выловить нужное,
я запустил поиск по #define __user, но найденные файлы содержали только строки
типа
#define __USER_DS (GDT_ENTRY_DEFAULT_USER_DS * 8 + 3)
#define __USER_CS (GDT_ENTRY_DEFAULT_USER_CS * 8 + 3)

Ответить   Tue, 28 Dec 2004 13:20:27 +0200 (#288255)

 

Здравствуйте, Rygoravich.

Вы писали 26 декабря 2004 г., 9:45:43:

Что-то на вскидку не вижу в чём дело.
Если есть возможость, скачайте патч ядра 2.6.10. Говорят, много ошибок там
пофиксили.

Ответить   "Andrey I. Klaus" Mon, 27 Dec 2004 10:14:04 +0300 (#287426)

 

Доброго времени суток.

On Mon, 27 Dec 2004 10:14:04 +0300
"Andrey I. Klaus" <akla***@l*****.ru> wrote:

Спасибо за ответ, но наверное, проще мне будет вернуться к дистрибутивному ядру...
В свое время я отказался от него т.к. в нем плохо работает звук (ну и хотелось
пощупать 2.6), но попробую с ним перекомпилить алсу...

Вообще, фишка в том, что нужно пустить в локальную сеть виртуальную машину, а
версия iptables из дистрибутива фильтрует нормально, но выдает ошибку при добавлении
правила для SNAT. Покопавшись в старых письмах из этого листа выяснил, что эта
проблема возникает после обновления ядра и устраняется перекомпиляцией iptables...

Ответить   Tue, 28 Dec 2004 08:45:53 +0200 (#287843)

 

Hello Rygoravich,

Tuesday, December 28, 2004, 1:45:53 PM, you wrote:

ядру...

а

добавлении

эта

Случайно это не моё письмо было? Там главное:

1. Правильно сконфигурировать ядро, включив соответствующие опции в
его конфиге, чтобы SNAT и всё что ещё надо работало. Причём в 2.4.28
добавили хитрую опцию (конфиг на работе, а наизусть не помню), которую
не сразу заметишь, и без которой NAT не работает. Может и с 2.6.х те
же проблемы?

2. Пересобрать iptables с заголовками _именно этого_ ядра.

Вывод: может и с дистрибутивным ядром будет работать, если поправить
конфиг и пересобрать.

А я отказался от использования дистрибутивного ядра на сервере из-за
проблем с безопасностью.

Ответить   Алексей Tue, 28 Dec 2004 19:09:25 +0700 (#288044)

 

Доброго времени суток.

On Tue, 28 Dec 2004 19:09:25 +0700
Алексей <alexei***@m*****.ru> wrote:

Ага, оно самое:). Кстати, посмотрел сейчас на дату - не такое уж и старое, три
недели всего:).

Вообще, я перекомпилил iptables, но похоже, что nat все равно не работает, хотя
правило добавляется нормально. Подробнее я уже описал в теме "подключение виртуального
компа в локалку через nat".

CONFIG_IP_NF_NAT_LOCAL=y, судя по тем вашим письмам? У меня оно включено, модулей
куча нужных и ненужных загружено, но требуемого результата все равно нет:(.

Завтра (точнее, уже сегодня:)) попробую...

Ответить   Wed, 29 Dec 2004 01:47:49 +0200 (#288289)