Linux/BSD IFNAMSIZ limit 16

Fórumok

Sziasztok!

Tud erre valaki magyarázatot adni, miért csak 15 hosszú lehet az interface név?

   Linux define value in /usr/include/linux/if.h.
   #define IFNAMSIZ        16
   FreeBSD define value in /usr/include/net/if.h.
   #define IFNAMSIZ        16

Hozzászólások

Tippem szerint azért, mert a kernel jelentős része C-ben íródott, ebben a nyelvben pedig a string hosszára nincs limit, a string végét egy bináris nulla jelzi. Tehát 16 = 15 tetszőleges karakter + 1 termináló bináris nulla.

Szerkesztve: 2023. 03. 15., sze – 08:02

Szerintem ez még a Unixból származik (tehát a systemd és docker előtti időkből), amikor bőven elég volt olyan név is, hogy `ethernet17` vagy `tokenring29`. (Sőt, ha jól tudom, eredetileg a fájlnevek sem lehettek hosszabbak, tehát nem volt lehetőség `Kedves Jóska Bácsi!.docx` szerű fájlokat alkotni.)

Szerkesztve: 2023. 03. 15., sze – 08:25

Erről eszembe jutott, amikor még elég volt fájlnévnek is az 1..8 hosszú név + fix 3 karakteres típusazonosító. Ma pedig a fájlnév is egy fél litánia és az ethernet interfész neve szintén.
Valójában nem a nevét kellene hosszúra venni, hanem hozzá kellene tudni egy komment mezőt kapcsolni, hasonlóan az "iptables -m comment ..." megoldáshoz.

Szerkesztve: 2023. 03. 15., sze – 09:27

Ha neked 15 ASCII char-nal hosszabb interface nev kell, akkor a problema resze vagy. :)

Olyan ez, mint a nyolc szonal hosszabb kaverendeles: mindenki erzi miert ciki, csak az nem, aki csinalja. :)

Jajj, ne is mondd. Pont most szopatott ez meg egy laptopon. Beszereltem egy új NVMe SSD-t (muszáj volt bővíteni, a régin helyszűke volt már), a másik meglévő mellé, erre beüzemelem, az új drive szépen működik, de meglepve tapasztaltam, hogy nincs net. Némi nyomozás után rájöttem, hogy a korábbi wlp3s0 Wi-Fi eszköz az új PCIe eszköz (SSD) miatt átneveződött wlp4s0-ra, a scriptjeim (jó, ez az én hibám is) fixre drótozottan a wlp3s0-n keresték a Wi-Fi eszközt. Nem is a névvel vannak a bajok, hanem hogy kedvére generálja a rendszer.

The world runs on Excel spreadsheets. (Dylan Beattie)

Igen, ezt írtam is, hogy félig én is hibás vagyok. Természetesen már javítottam, egy extra sor kellett a scriptbe, meg egy másikat kellett módosítani, hogy többé ne függjön a konkrét azonosítótól, hanem detektáljam a wlp-vel kezdődő eszközt. Csak ezt nem láttam előre, hogy ilyen miatt is változhat az azonosító, és a rendszer meg hátba támadva átgenerálgatja. Azzal tisztában voltam, hogy ha esetleg másik Wi-Fi-kártyát rakok be, akkor változhat, de így, ezt nem gondoltam volna.

Saját script helyett használhatnék valami bloatot is épp, pl. systemd Network Manager service, netctl, stb., de nincs rá szükségem. Ez a saját script is szépen tette eddig a dolgát, tized annyi hardverigény mellett.

The world runs on Excel spreadsheets. (Dylan Beattie)

Régen nem volt netlink, csak ioctl hívások, amiknél előre definiált műveletek voltak, fix paraméterekkel. Minden paraméter fix formátummal rendelkezett, és kellett valami struktúra, ami megjelenik UAPI és kernel oldalon is, nem túl nagy de nem is túl kicsi. Gondolom ezért lett 16 bájt. Netlink sokkal flexibilisebb valamint minden üzenet mellé meg lehet adni a hossz is, amit a kernel kedvére parseolhat.