Bug 37173

Summary: добавить имя ether в список опознаваемых как TYPE eth
Product: Sisyphus Reporter: Sergey Y. Afonin <asy>
Component: etcnetAssignee: Mikhail Efremov <sem>
Status: NEW --- QA Contact: qa-sisyphus
Severity: enhancement    
Priority: P3 CC: ldv, mike, rider, sem, shaba, vseleznv
Version: unstable   
Hardware: all   
OS: Linux   

Description Sergey Y. Afonin 2019-08-31 12:13:41 MSK
В рамках работы над https://bugzilla.altlinux.org/32167
Как-то вот так например:

--- functions.bak       2018-12-03 16:30:57.000000000 +0400
+++ functions   2019-08-31 13:01:39.750502691 +0400
@@ -128,6 +128,9 @@
 {
        local NAME=${1:?missing 1st arg to $FUNCNAME}
        local CAND=${NAME%%[0-9]*}
+       if [ $CAND = "ether" ]; then
+               CAND=eth
+       fi
        supported_type $CAND && echo $CAND
 }
Comment 1 Sergey Y. Afonin 2019-08-31 12:21:19 MSK
кавычки забыл: [ "$CAND" = "ether" ]
Comment 2 Sergey Y. Afonin 2019-08-31 18:12:17 MSK
Или, может, правильнее несколько симлинков просто добавить:

create-ether -> create-eth
destroy-ether -> destroy-eth
setup-ether -> setup-eth
shutdown-ether -> shutdown-eth
Comment 3 Sergey Y. Afonin 2020-03-10 17:04:33 MSK
Похоже вариант с тремя строчками в functions проще. Нет возражений по поводу такой доработки?
Comment 4 Sergey Y. Afonin 2020-07-27 19:31:57 MSK
(In reply to Sergey Y. Afonin from comment #3)

> Похоже вариант с тремя строчками в functions проще. Нет возражений по поводу
> такой доработки?

https://lists.altlinux.org/pipermail/devel/2020-April/210614.html

Как там с обновлением?
Comment 5 Anton Farygin 2020-07-28 08:03:28 MSK
Не совсем понятно - зачем. 
TYPE же всегда можно указать.
Comment 6 Sergey Y. Afonin 2020-07-28 08:26:41 MSK
(In reply to Anton Farygin from comment #5)

> Не совсем понятно - зачем. 
> TYPE же всегда можно указать.

Для удобства. TYPE вообще же для всего можно написать, но есть автоопределение. :-)
Comment 7 Mikhail Efremov 2020-10-30 15:23:41 MSK
Мне не очевидно почему имя ether должно быть обработано особым образом. Как я вижу оно не является умолчанием даже в udev-rule-generator сейчас. Имена интерфейсов могут быть произвольные, мы же не будем добавлять все варианты имен, которые кто-то у себя может использовать?
Скорее уж логичнее добавлять поддержку для стандартной схемы именования, которая используется в udev сейчас (вида enp0s1). Но я и этого не хочу делать, текущая функция проста и понятна, а усложнение ее будет выглядеть уже как набор костылей, достаточно посмотреть на предложенный патч.
Я думаю, что стоит вообще перестать полагаться на это автоопределение типа и всегда указывать тип явно в конфиге.
Comment 8 Anton Farygin 2020-10-30 15:28:57 MSK
Лучше тогда уж логику переписать на sysfs или udev.

Там уже есть определение типа интерфейса. 

/sys/class/net/<name>/type = 1 это eth
Comment 9 Mikhail Efremov 2020-10-30 15:40:44 MSK
да, тоже вариант. Хотя надо посмотреть, возможно для других типов интерфейсов тип определяется до того, как интерфейсы создаются.
Comment 10 Mikhail Efremov 2020-10-30 16:01:39 MSK
(Ответ для Mikhail Efremov на комментарий #9)
> да, тоже вариант. Хотя надо посмотреть, возможно для других типов
> интерфейсов тип определяется до того, как интерфейсы создаются.

Да, это определение происходит в самом начале, при чтении конфигов. Собственно, функция называется name2type() и делает именно то, что заявлено в названии. Добавлять в нее заглядывание в sysfs точно не надо. Можно сделать еще одну функцию для этого, но мне кажется это тоже лишнее.
Comment 11 Sergey Y. Afonin 2020-10-30 16:04:21 MSK
(In reply to Mikhail Efremov from comment #7)

> Мне не очевидно почему имя ether должно быть обработано особым образом. Как
> я вижу оно не является умолчанием даже в udev-rule-generator сейчас.

Только потому, что пока от этого ломается Альтератор и etcnet интерфейсы не поднимает без type. А так всё готово. Ручка в /etc/sysconfig, можно переключить даже без обновления пакета.

> Имена интерфейсов могут быть произвольные, мы же не будем добавлять все варианты

Да, но какое-то должно же быть по умолчанию, и это не eth, так как eth сломали в udev. Я бы с удовольствием ничего не менял, если бы у кого-то ручки шаловливые до udev не дотянулись.
Comment 12 Sergey Y. Afonin 2020-10-30 16:08:17 MSK
(In reply to Mikhail Efremov from comment #7)

> Я думаю, что стоит вообще перестать полагаться на это автоопределение типа и
> всегда указывать тип явно в конфиге.

Хотя, в общем-то, тоже вариант, но будет ли удобно и не будет ли каких-то проблем с забывчивостью. Пока-то параметр необязательный.
Comment 13 Mikhail Efremov 2020-10-30 16:18:47 MSK
(Ответ для Sergey Y. Afonin на комментарий #11)
> Только потому, что пока от этого ломается Альтератор и etcnet интерфейсы не
> поднимает без type.

Alterator-net-eth всегда прописывал TYPE явно.

> Да, но какое-то должно же быть по умолчанию, и это не eth, так как eth
> сломали в udev. Я бы с удовольствием ничего не менял, если бы у кого-то
> ручки шаловливые до udev не дотянулись.

Это умолчание тогда уж имена вида enp0s1, как я писал выше.

> Хотя, в общем-то, тоже вариант, но будет ли удобно и не будет ли каких-то
> проблем с забывчивостью. Пока-то параметр необязательный.

TYPE всегда обязательный, просто etcnet может попытаться угадать его по имени. Разумеется, всегда надежнее указать явно.
Comment 14 Sergey Y. Afonin 2020-10-30 17:59:08 MSK
(In reply to Mikhail Efremov from comment #13)

> Это умолчание тогда уж имена вида enp0s1, как я писал выше.

За такие имена вообще руки надо отрывать. Однообразия нет, постоянности нет. Чего добились - не ясно.
Comment 15 Sergey Y. Afonin 2020-10-30 18:03:43 MSK
(In reply to Mikhail Efremov from comment #13)

> > Только потому, что пока от этого ломается Альтератор и etcnet интерфейсы не
> > поднимает без type.
> 
> Alterator-net-eth всегда прописывал TYPE явно.

Хотя про Alterator, возможно, я поторопился. Было такое сообщение:
https://lists.altlinux.org/pipermail/devel/2019-August/208342.html
Я решил, что что-то сломалось, но может быть я был не прав. Уточню.
Comment 16 Anton Farygin 2020-10-30 19:01:45 MSK
(Ответ для Mikhail Efremov на комментарий #10)
> (Ответ для Mikhail Efremov на комментарий #9)
> > да, тоже вариант. Хотя надо посмотреть, возможно для других типов
> > интерфейсов тип определяется до того, как интерфейсы создаются.
> 
> Да, это определение происходит в самом начале, при чтении конфигов.
> Собственно, функция называется name2type() и делает именно то, что заявлено
> в названии. Добавлять в нее заглядывание в sysfs точно не надо. Можно
> сделать еще одну функцию для этого, но мне кажется это тоже лишнее.

Я честно говоря не понял о чём речь. Если интерфейса на момент входа в эту функцию нет, то его уже после этого никто не создаст (в случае с eth). А если есть, то тип интерфейса можно взять из sysfs, вместо автоугадава по имени.
Comment 17 Mikhail Efremov 2020-10-30 22:03:12 MSK
Тип определяет какие функции etcnet будет использовать дальше. В случае виртуальных интерфейсов (вроде bridge) как раз тип и определяет, что их нужно создавать.
Comment 18 Anton Farygin 2020-10-31 10:29:10 MSK
Это понятно. но в случае, если запрашиваемый интерфейс уже есть, а тип явно не определён. то разумно было бы уточнить этот тип через sysfs, а не полагаться в логике определения на имя интерфейса.