TH udev i zamiana interface eth0 z eth1
Bartosz Lis
bartoszl w ics.p.lodz.pl
Śro, 16 Maj 2012, 12:21:47 CEST
On Tuesday 17 of April 2012 09:24:09 Łukasz Maśko wrote:
> Dnia wtorek, 17 kwietnia 2012, Paweł Kośka napisał:
> > 2012/4/16 Paweł Kośka <pawel w viop.pl>:
> > > W dniu 16 kwietnia 2012 16:41 użytkownik Paweł Kośka <pawel w viop.pl>
> > > napisał:
> > >
> > >
> > > Interface od vlanów też zmienia nazwę;)
> > > Łukasz obadam też Twoją wersję.
> >
> > No i ciągle jest źle....
> > Ale już sytuacje naprawiłem, wyciągnąłem drugą sieciówkę i już system
> > nie ma problemu z nazwami ;)
>
> Cokolwiek dziwne. U mnie działa już wiele miesięcy i nie zdarzyło się, że
> system źle zaskoczył.
Witam,
Opisany problem pojawiaja się na 100%, gdy ma się więcej niż jedną sieciówkę
kontrolowaną przez ten sam moduł jądra lub sieciówkę wieloportową. Wtedy przy
ładowaniu modułu na raz pojawia się więcej niż jeden interfejs. Np. na raz
pojawiają się eth0 i eth1.
Załóżmy że admin, chciał aby intefejsy sieciowe dostawały kolejne nazwy w/g
fizycznego położenia na obudowie idąc od lewej do prawej (lub z góry na dół).
Tymczasem moduł wstępnie nazywa karty eth0 i eth1 nie wiedząc nic o fizycznym
położeniu interfejsów na obudowie/śledziu. Mamy scenariusz:
krok 1. Moduł jądra wykrywa dwa interfejsy i wstępnie je nazywa. Załóżmy że
wstępne nazwy zostały przydzielone odwrotnie, niż by chciał admin.
krok 2. Jądro wysyła zdarzenia do UDEVa, że zainicjowało urządzenia sieciowe.
krok 3. Teraz następuje faza modyfikacji nazw przez UDEVa na podstawie MACów.
Niestety nazwy eth0 nie można zmienić na eth1, bo ta już jest zajęta przez
interfejs, który dla odmiany powinien nazywać się eth0, ale też nie może być
przezwany, bo obie nazwy zostały nadane jednocześnie w kroku 1.
W sytuacji, gdy każdy interfejs jest kontrolowany przez osobny moduł jądra
(jak w pierwszym poście tego wątku) według mnie występuje wyścig (nie badałem
tego w źródłach jądra, ale z własnych obserwacji tak sądzę). Moduł wstępnie
nazywa interfejs w trybie kernela i generuje zdarzenie do udeva w userlandzie.
Może się tak zdarzyć, że przed obsłużeniem tego zdarzenia przez UDEV jądro
zacznie inicjować następny moduł. Mamy wtedy zasadniczo dwa scenariusze:
A. W jednych skrzynkach pierwszy moduł nadaje wstepną nazwę pierwszemu
interfejsowi a UDEV ją zmienia ZANIM drugi moduł nada wstępną nazwę drugiemu
interfejsowi. Wtedy wszystko jest OK.
B. W innych skrzynkach wyścig rozstrzyga się pechowo: transmisja zdarzeń do
userlandu trwa wolniej i udev przystępuje do zmieny nazw dopiero wtedy, gdy
oba moduły już wstępnie nazwały swoje interfejsy (odwrotnie niż w ustawieniach
UDEVa) i nawzajem blokują sobie zmianę nazw.
Moje wyjście z tego impasu jest takie, że poprzez UDEV zmieniam nazwy kart
sieciowych na n0, n1, n2, n3 itd. Tak naprawdę może być cokolwiek innego niż
eth[0-9]+ . W zasadzie można by pójść krok dalej i nazywać interfejsy bardziej
opisowo: n_lan, n_dmz, n_isp, itp.
Pozdrawiam,
--
Bartosz Lis
[pl] Instytut Informatyki Politechniki Łódzkiej
[en] Institute of Information Technology, Technical University of Lodz
Wolczanska 215
90-924 Lodz, Poland
phone: +48(42)6312796
fax: +48(42)6303414
email: bartoszl w ics.p.lodz.pl
Więcej informacji o liście pld-users-pl