1

Итак, дано:
1. серверочек с гигабитной интегрированной сетевой платой.
2. RFR-15.PAE
3. Поддержка гигабитной сети осуществляется дровами от реалтека r8168. Которые компилируются для своей работы на этом сервере. Из официальных исходников.
-------------
Итак, yum update... Приезжает новое ядро, devel к нему... Перегружаемся и нет сетевого интерфейса. Пытаюсь перекомпилировать сетевой драйвер. Литовский народный праздник - обломайтис. Компилятор выявляет массу неопределенных переменных... Соответственно скомпилировать ничего не может.   Загружаюсь прежним ядром - всё прекрасно компилируется. Ну, настроил GRUB, чтобы он нужное ядро грузил. Но это же не правильно... И что делать?

2

А почему не используешь драйвер, идущий в ядре?
Ну и без логов сказать что-то конкретное нельзя.

3 (14.05.2012 14:18:34 отредактировано Cruiser78)

Vascom пишет:

А почему не используешь драйвер, идущий в ядре?
Ну и без логов сказать что-то конкретное нельзя.

С логами - отказать, потому что повторять попытку буду не скоро... Сервер в промышленной эксплуатации и времени на эксперименты с ним у меня весьма мало.
Почему не "ядерный" драйвер - так сложилось исторически. Сервер был проинсталлирован и, главное, настроен на одном железе (весьма древнем). Потом произведена модернизация железа, когда от компьютера остались только корпус и винчестер с настроенной осью.  Тот драйвер, что стоял в оси (если не изменяет склероз - r8169) на гигабит скорости выходить не захотел. Мало того, что не захотел, так и вообще вскоре (опять же, после очередного обновления  ядра) интерфейс перестал подниматься при пеерезагрузке.
Покурив интернет - вычитал, что это фича и лечится она установкой драйвера r8168 от Realtec'а. Поставил, вылечилось. После чего (сегодня) снова обновил ось. Приехало новое ядро с новыми хедерами и то, что компилировалось на старом ядре (kernel /vmlinuz-2.6.42.12-1.fc15.i686.PAE) компилироваться на новом (kernel /vmlinuz-2.6.43.2-6.fc15.i686.PAE) штатной процедурой отказалось.
Ошибки я сказал - не определен целый ряд объектов. Очень похоже на то, что нужный файл xxxx.h есть, директива #include <xxxxx.h> отрабатывает без ошибок, а вот в самом этом файле - пустота вместо определения этих объектов. Отсюда и ошибки. Скомпилировать драйвер невозможно. В результате - при наличии "старого", не перекомпилированного, драйвера в новом ядре сетевой интерфейс не поднимается как класс.  На том сервере есть еще пара сетевых интерфейсов - они поднимаются правильно. А вот проблема - с интегрированным гигабитником. Не хочет он дружить с "ядерным" драйвером.

ps. Я бы откатился на "ядерный" драйвер (время найду), но не знаю как это сделать (точнее - как он называется? modprobe что?)

======================
В спойлере лог компиляции драйвера. Получен путем грубой замены штатных заголовков ядра на заголовки ядра нового:

+ открыть спойлер

# make modules
make -C src/ modules
make[1]: Вход в каталог `/usr/src/r8168-8.029.00/src'
make -C /lib/modules/2.6.42.12-1.fc15.i686.PAE/build SUBDIRS=/usr/src/r8168-8.029.00/src modules
make[2]: Вход в каталог `/usr/src/kernels/2.6.42.12-1.fc15.i686.PAE'
  CC [M]  /usr/src/r8168-8.029.00/src/r8168_n.o
/usr/src/r8168-8.029.00/src/r8168_n.c:2232:2: ошибка: неизвестное поле «get_rx_csum» в инициализаторе
/usr/src/r8168-8.029.00/src/r8168_n.c:2232:2: предупреждение: несовместимый тип указателя в инициализации [по умолчанию включена]
/usr/src/r8168-8.029.00/src/r8168_n.c:2232:2: предупреждение: (где-то рядом с инициализацией для «rtl8168_ethtool_ops.nway_reset») [по умолчанию включена]
/usr/src/r8168-8.029.00/src/r8168_n.c:2233:2: ошибка: неизвестное поле «set_rx_csum» в инициализаторе
/usr/src/r8168-8.029.00/src/r8168_n.c:2233:2: предупреждение: несовместимый тип указателя в инициализации [по умолчанию включена]
/usr/src/r8168-8.029.00/src/r8168_n.c:2233:2: предупреждение: (где-то рядом с инициализацией для «rtl8168_ethtool_ops.get_link») [по умолчанию включена]
/usr/src/r8168-8.029.00/src/r8168_n.c:2234:2: ошибка: неизвестное поле «get_tx_csum» в инициализаторе
/usr/src/r8168-8.029.00/src/r8168_n.c:2234:2: предупреждение: несовместимый тип указателя в инициализации [по умолчанию включена]
/usr/src/r8168-8.029.00/src/r8168_n.c:2234:2: предупреждение: (где-то рядом с инициализацией для «rtl8168_ethtool_ops.get_eeprom_len») [по умолчанию включена]
/usr/src/r8168-8.029.00/src/r8168_n.c:2235:2: ошибка: неизвестное поле «set_tx_csum» в инициализаторе
/usr/src/r8168-8.029.00/src/r8168_n.c:2235:2: предупреждение: несовместимый тип указателя в инициализации [по умолчанию включена]
/usr/src/r8168-8.029.00/src/r8168_n.c:2235:2: предупреждение: (где-то рядом с инициализацией для «rtl8168_ethtool_ops.get_eeprom») [по умолчанию включена]
/usr/src/r8168-8.029.00/src/r8168_n.c:2236:2: ошибка: неизвестное поле «get_sg» в инициализаторе
/usr/src/r8168-8.029.00/src/r8168_n.c:2236:2: предупреждение: несовместимый тип указателя в инициализации [по умолчанию включена]
/usr/src/r8168-8.029.00/src/r8168_n.c:2236:2: предупреждение: (где-то рядом с инициализацией для «rtl8168_ethtool_ops.set_eeprom») [по умолчанию включена]
/usr/src/r8168-8.029.00/src/r8168_n.c:2237:2: ошибка: неизвестное поле «set_sg» в инициализаторе
/usr/src/r8168-8.029.00/src/r8168_n.c:2237:2: предупреждение: несовместимый тип указателя в инициализации [по умолчанию включена]
/usr/src/r8168-8.029.00/src/r8168_n.c:2237:2: предупреждение: (где-то рядом с инициализацией для «rtl8168_ethtool_ops.get_coalesce») [по умолчанию включена]
/usr/src/r8168-8.029.00/src/r8168_n.c:2239:2: ошибка: неизвестное поле «get_tso» в инициализаторе
/usr/src/r8168-8.029.00/src/r8168_n.c:2239:14: ошибка: «ethtool_op_get_tso» undeclared here (not in a function)
/usr/src/r8168-8.029.00/src/r8168_n.c:2240:2: ошибка: неизвестное поле «set_tso» в инициализаторе
/usr/src/r8168-8.029.00/src/r8168_n.c:2240:14: ошибка: «ethtool_op_set_tso» undeclared here (not in a function)
/usr/src/r8168-8.029.00/src/r8168_n.c:12807:2: предупреждение: несовместимый тип указателя в инициализации [по умолчанию включена]
/usr/src/r8168-8.029.00/src/r8168_n.c:12807:2: предупреждение: (где-то рядом с инициализацией для «rtl8168_netdev_ops.ndo_fix_features») [по умолчанию включена]
/usr/src/r8168-8.029.00/src/r8168_n.c:12808:2: предупреждение: несовместимый тип указателя в инициализации [по умолчанию включена]
/usr/src/r8168-8.029.00/src/r8168_n.c:12808:2: предупреждение: (где-то рядом с инициализацией для «rtl8168_netdev_ops.ndo_set_features») [по умолчанию включена]
make[3]: *** [/usr/src/r8168-8.029.00/src/r8168_n.o] Ошибка 1
make[2]: *** [_module_/usr/src/r8168-8.029.00/src] Ошибка 2
make[2]: Выход из каталога `/usr/src/kernels/2.6.42.12-1.fc15.i686.PAE'
make[1]: *** [modules] Ошибка 2
make[1]: Выход из каталога `/usr/src/r8168-8.029.00/src'
make: *** [modules] Ошибка 2

если вернуть старые заголовки на штатное место - компиляция проходит без ошибок.

Итак, вот где собака зарылась:
Версия предыдущая, рабочая:

 2.6.42.12-1.fc15.i686.PAE]# grep -R get_rx_csum *
include/linux/ethtool.h: * @get_rx_csum: Deprecated in favour of the netdev feature %NETIF_F_RXCSUM.
include/linux/ethtool.h:    u32    (*get_rx_csum)(struct net_device *);
include/linux/netdevice.h:static inline u32 dev_ethtool_get_rx_csum(struct net_device *dev)
include/linux/netdevice.h:    if (!dev->ethtool_ops || !dev->ethtool_ops->get_rx_csum)
include/linux/netdevice.h:    return dev->ethtool_ops->get_rx_csum(dev);
System.map:c0871e20 t __ethtool_get_rx_csum_oldbug
 2.6.42.12-1.fc15.i686.PAE]#

Версия последняя, подлая:

2.6.43.2-6.fc15.i686.PAE]# grep -R get_rx_csum *
[2.6.43.2-6.fc15.i686.PAE]#

И чо делать? Кому бить морды?

4

Ну напиши в багзиллу. http://bugzilla.redhat.com

5 (14.05.2012 15:12:36 отредактировано Cruiser78)

Vascom пишет:

Ну напиши в багзиллу. http://bugzilla.redhat.com

Знаешь, я не умею ею пользоваться. Тем более, что решения проблемы, скорее всего, не будет. RFR-15 сейчас должна быть уже снята с поддержки. Если я правильно помню политику техподдержки федор.
К тому же определения из заголовков не просто так удаляются. Но исключительно обоснованно. Значит и структуры соответствующие в ядре тоже могли поменяться. Как взад это дело вернуть? Не представляю...

6

Ф15 отомрёт только через месяц.

7 (14.05.2012 20:39:10 отредактировано Cruiser78)

Vascom пишет:

Ф15 отомрёт только через месяц.

Изложил свою позицию там: http://forum.russianfedora.ru/viewtopic … 059#p26723
Вобщем, неправильно это, убирать из стандартных заголовков описания типов. И что теперь, масса вендоров должна будет поддерживать две ветки своих продуктов, под "стандартное" ядро, и по федорино? Или федорописатели теперь будут писать свои драйвера на всё выпускаемое железо? И что делать потребителю железа, если федориных драйверов под него нет (или не так работают), а есть официальные, но под "стандартные" хедера?
Это не есть правильное решение. Люди, столкнувшись с таким вывертом разработчиков, от федоры просто откажутся.

8 (14.05.2012 22:01:02 отредактировано bormant)

2.6.42.12-1.fc15.i686.PAE]
2.6.43.2-6.fc15.i686.PAE]

А ведь это, пожалуй, проделки апстрима, в данном случае -- разработчиков ядра, разве нет?

Пока Риалтек дрова не поправил под 3.3.2 (он же 2.6.43.2), можно пропатчить дровишки самостоятельно по аналогии: https://bbs.archlinux.org/viewtopic.php?id=139219

9

Естественно это апстрим, а не Федора. Федора использует апстримное ядро с некоторыми патчами, которые точно не меняли заголовки.
Так что это "масса вендоров должна будет поддерживать две ветки своих продуктов, под "стандартное" ядро, и по федорино" не проблема Федоры.

Во-вторых, этот драйвер должен быть в ядре, где вендор и должен его поддерживать. А всякие самосборные модули уж точно вендоров, ядро и Федору не должны волновать.

Используй драйвер из ядра.

10

Vascom пишет:

Используй драйвер из ядра.

Несколько раз спрашивал. Как он называется? Что именно надо инсталлировать?
Если я убираю текущий (но работоспособный) драйвер, то ось просто не поднимает сетевой интерфейс.

11

Называется он rtl8169 вроде бы.
А вообще, покажи вывод lspci -k на новом ядре, для начала.