Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[C,Linux,Sieci] - Sprawdzanie stanu połączenia LAN

14 Wrz 2013 22:09 2196 5
  • Poziom 15  
    Witam,
    Piszę program w C na linuksa ( dokładnie pod OpenWrt, działającym na Mikrotik RB411U ) i potrzebuję wykrywać stan połączenia LAN. Korzystam ze standardowych bibliotek dostępnych dla kompilatora GCC.

    Urządzenie ma jeden port RJ45 który jest skonfigurowany jako LAN, i działa na interfejsie br-lan ( jeśli to istotne ).
    Do tego portu będzie podłączony PC którego IP będzie przydzielane dynamicznie.
    Chciałbym móc wykrywać stan tego połączenia, czy jest aktywne, czy nieaktywne - mnie interesuje tak naprawdę to czy PC klienta jest uruchomiony czy nie.

    Mógłbym napisać prosty program uruchamiany na PC który komunikowałby się z mikrotikiem, i na tej podstawie stwierdzać czy PC jest włączony czy nie, jednak chciałbym zrobić to bez pisania dodatkowego programu.
    Czy można by wykorzystać stany diod LED przy porcie RJ45, a jeśli tak to w jaki sposób? Czy jest jakaś funkcja systemowa która informuje o stanie połączenia sieciowego?
    Jeśli jest jakiś inny sposób to także proszę o poradę.

    Z góry dziękuję za zainteresowanie i pozdrawiam.
  • Poziom 10  
    Możesz skorzystać w pakietu NAGIOS. Stale monitoruje połączenie sieciowe.
  • Poziom 32  
    ethtool podaje stan interfejsu sieciowego - czy jest link (dokładnie to co pokazują diody)
  • Poziom 32  
    krru napisał:
    ethtool podaje stan interfejsu sieciowego - czy jest link (dokładnie to co pokazują diody)

    Ale to działa również wtedy, gdy klient ma włączony Wake on LAN. Nagios to tutaj strzelanie z armaty do muszki owocówki.

    Rozwiązanie w praktyce jest jedno i proste jak but, ping.
  • Poziom 15  
    Dzięki za pomoc.

    Wykorzystałem ping, i sprawdza się dobrze.
    Jednak aby sprawdzić 'fizycznie' czy kabel jest wpięty czy nie do interfejsu użyłem dodatkowego rozwiązania ( nie pinguje, jeśli link jest nieaktywny ) które znalazłem po dość długim googlowaniu. Podzielę się nim tutaj:

    Aktualny stan interfejsu ethX można odczytać z plików:
    gdzie ethX to nazwa interfejsu który nas interesuje
    Code:
    /sys/class/net/ethX/carrier

    0 - brak linka
    1 - jest link
    Code:
    /sys/class/net/ethX/operstate

    up - interfejs podniesiony
    down - interfejs nieaktywny

    Dobrze jest sprawdzać obydwa warunki.
    Czytanie z tych plików nie wymaga roota.
    Pozdrawiam i dzięki za odpowiedzi.