(Untitled)

Mar 05, 2020 12:46


206761 - escape codes in network interface names causes chaos

bugzilla.kernel.org


echo -e '\x1B[2J'|xargs -I I sudo ip link add I type dummy
echo -e '\xf0\x9f\x92\xa9\xf0\x9f\x92\xa9' |xargs -I I  sudo ip link add I type dummy

linux

Leave a comment

mc6312 March 5 2020, 11:58:01 UTC
Т.е. сетевые интерфейсы можно обзывать не-ascii символами? И какой [censored] это придумал?
Блин, шо винда, шо *никсы - локализуют то, что не надо, что надо - не локализуют.

Reply

amarao_san March 5 2020, 12:11:26 UTC
Придумал это я. А вот почему ядро принимает в качестве имени почти любые байты - это вопрос интересный. Видимо, потому же, почему и файлы.

Reply

mc6312 March 5 2020, 12:32:52 UTC
> А вот почему ядро принимает в качестве имени почти любые байты
Я именно об этом. КМК для имен устройств и прочих псевдофайлов должно быть ограничение, ибо ваистену.
Еще б я с удовольствием дал бы в глаз тому, кто придумал VFS сделать неюникодной (т.е. шоб ТОЛЬКО юникодные символы и никаких "байтов") и выставил ограничение в 255 _байт_ на длину имени файла, и тем, кто после 1991 года (как минимум) придумывал ФС, позволяющие неюникодные кодировки (или, как минимум, ФС без информации о кодировке в заголовке ФС).
Еще хочется от души харкнуть в разработчиков регистро-зависимых ФС, но это всё ж меньшее зло, по сравнению с вышеперечисленным.

Reply

amarao_san March 5 2020, 12:48:29 UTC
Не трогай вопрос "юникодных символов". Там бездна. Например, "и" и "и + ◌̆"

Вот, смотри:
й
и ̆

Это одна буква или разные? Unicode - бездна, со своими правилами нормализации и т.д. Единственный, кто его осилил по-настоящему - это Rust. И это ТОЛСТЫЙ бинарь. Только ради unicode.

... меня сейчас больше бесит лимит на 15 символов для имени интерфейса.

Reply

mc6312 March 5 2020, 13:06:16 UTC
> Не трогай вопрос "юникодных символов". Там бездна. Например, "и" и "и + ◌̆ ( ... )

Reply

amarao_san March 5 2020, 13:39:35 UTC
Если ты делаешь unicode неполным, это хуже, чем если ты его вообще не делаешь, а используешь просто как байтстрим.

Объясняю, почему 15 символов жопа. Виртуальных интерфейсов может быть много.

Вот, например, у меня интерфейс mock_bgp_as_65535_outside (пара с veth в mock_bgp_as_65535_inside). Но нет, на самом деле оно называется bgp_ma65535i, потому что 15. Понятнее, да?

Reply

mc6312 March 5 2020, 17:01:50 UTC
Тогда уже назревает вопрос, а не нужны ли тут деревья вместо просто длинных имён, и какого вообще фига сетевые интерфейсы не видны в /dev, как прочие устройства. Было б /dev/ethernet/mock/... или как-то так...
А, ну есть /sys/class/net/..., но один фиг настраиваемость "дерева" в случае статыщ интерфейсов не помешала бы.

Reply

amarao_san March 6 2020, 12:30:59 UTC
/sys/class/net всего лишь переменные ядра, а не сами объекты. Теоретически, иметь сетевые интерфейсы в форме /sys/class/net было было бы круто. Я, кстати, никогда не понимал, почему сетевые интерфейсы такие специальные устройства, которым не полагается major для файла. Модем - устройство, а сетевой интерфейс на базе модема - нет. Странно.

Reply

mc6312 March 6 2020, 14:14:16 UTC
Ну, для посмотреть "а чо у меня за интерфейсы есть" уже и /sys/class/net хватает (лично мне).

Reply

amarao_san March 6 2020, 14:16:15 UTC
Ща я посмотрю, что у меня там образовалось после этих эскейп-кодов...

А вот там, эcкейпят, кстати.

lrwxrwxrwx 1 root root 0 Mar 5 17:20 ''$'\033''[2J' -> '../../devices/pci0000:00/0000:00:1c.4/0000:3a:00.0/net/'$'\033''[2J'

Reply

mc6312 March 6 2020, 16:23:59 UTC
А там ли эскейпят, или это ls так отображает?

Reply

mc6312 March 7 2020, 05:20:14 UTC
Хе. https://www.opennet.ru/opennews/art.shtml?num=52496
"В systemd-udevd и другие компоненты systemd добавлена поддержка механизма назначения альтернативных имён сетевым интерфейсам, позволяющего одновременно применять для одного интерфейса сразу несколько имён. Размер имени может достигать 128 символов"

Reply

amarao_san March 7 2020, 07:41:37 UTC
Ага. Но ядро не принимает.

Reply

mc6312 March 7 2020, 08:25:45 UTC
Ээээ... это как?! В настройках systemd-udevd можно задать имя, которое ведро не поймёт?!
Или там какое-то подобие ситуации с симлинками на /dev/sdX в виде /dev/disk/by-xxx/yyy?
Если последний случай - то и ладно бы, вполне себе вариант...

PS. (Не)кстати о дисках: на говнохабре тут некто на интересные грабли с именованием устройств и разделов NVME наступил: https://habr.com/ru/post/491454/
Если это не отдельный взбрык на отдельной машине - то это как-то того-с.

Reply

mc6312 March 7 2020, 13:00:15 UTC
Чушь пишут. Да, у nvme первое устройство - символьное. Как и у многих аппаратных рейдов. Люди, перед тем, как что-то с рейдом делать, обычно смотрят на /proc/mdstat, хотя бы. А человек напечатал фигню и потом рассказывает, что он напечатал фигню.

ЗЫ С переименованием сетевых интерфейсов эпично, потому у меня есть usb-wifi-сетевуха, которую если воткнуть в док-станцию Thunderbolt, по new name convention получает имя, которое слишком длинное.

А лимит 15 символов есть. Я не смотрел, можно ли его поменять.

Reply

mc6312 March 7 2020, 15:31:12 UTC
> Да, у nvme первое устройство - символьное

Так блин в чём и дело-то. В массиве одно устройство, шмарт опрашивает другое. И где смотреть, какое к кому относится?

Reply


Leave a comment

Up