logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[AVR][C][ENC28J60] DHCP działa wybiórczo

damiano713 12 Kwi 2011 20:25 3609 13
  • #1 9392945
    damiano713
    Poziom 15  
    Witam,

    Jako, że zostało mi niespełna 3,5 tygodnia do matury, postanowiłem pobawić się z AVR'kami i dopieścić co nieco w kodzie. :)
    Napotkałem na bardzo dziwny problem z przydzielaniem adresów sieciowych po DHCP.
    Mianowicie, DHCP działa tylko z serwerem dhcp3-server (na Fedora14) na komputerze. Nie współpracuje z routerami HUAWEI B970 i Linksys. Po wysłaniu DHCP-OFFER nic się nie dzieje. Karta nie odbiera lub nie akceptuje pakietów DHCP-OFFER. Możliwe też, że router w ogóle ich nie wysyła.
    Zanim zacznę kroić kable i podsłuchiwać transmisję miedzy routerem a ENC28J60 chciałem zasięgnąć rady u fachowców.

    Na poniższym kodzie zamieszczam logi po włączeniu mikrokontrolera, jest on podłączony do komputera.
    Cytat:
    1WIRE FOUND: 0
    Note: UDP open port 68
    DISCOVER sent
    DISCOVER sent
    ** DHCP OFFER RECVD! **
    REQUEST sent
    ** DHCP ACK RECVD! **
    LEASE 0 0 258
    USING DHCP
    Sending ARP request
    PACKET RECEIVED
    ARP reply
    Sending ARP request
    PACKET RECEIVED
    ARP reply
    Compiled at Apr 12 2011 at 19:22:03
    Compiled on GCC version 4.5.1
    IP: 10.0.0.200
    MASK: 255.255.255.0
    GATE: 10.0.0.1
    NTP: 192.168.0.1
    MAC: 44:41:4D:49:41:4E
    Note: UDP open port 6000
    Sending ARP request
    PACKET RECEIVED
    ARP reply
    NTP REQUEST
    TCP: Listening on port 65535
    TCP: Outcomming connection on port 65534
    Note: TCP change port 65535 to 65534
    GG: Listening on port 65534
    PACKET RECEIVED
    GG: Connected!
    PACKET RECEIVED
    GG: New data

    Jak widać serwer wysyła DHCP-OFFER i otrzymuje od komputera odpowiedź. Wszystko przebiega pomyślnie i ustawiany jest adres z puli 10.0.0.200.
    Połączenie z internetem również jest.
    W załączniku zamieszczam zrzut pakietów z Wireshark.

    Pakiet DHCP-OFFER wysyłany przez AVR.
    [AVR][C][ENC28J60] DHCP działa wybiórczo

    Po podłączeniu do routera z DHCP, nic się nie dzieje. Na poniższym logu widać, jak AVR wysyła DHCP-OFFER i nie otrzymuje nic (to jest żadnego pakietu).
    Cytat:
    1WIRE FOUND: 0
    Note: UDP open port 68
    DISCOVER sent
    DISCOVER sent
    DISCOVER sent
    DISCOVER sent
    DISCOVER sent
    DISCOVER sent
    DISCOVER sent
    DISCOVER sent
    DISCOVER sent
    DISCOVER sent
    DISCOVER sent
    DHCP timeout
    DHCP FAILED
    Sending ARP request
    Sending ARP request
    Compiled at Apr 12 2011 at 19:22:03
    Compiled on GCC version 4.5.1
    IP: 192.168.1.15
    MASK: 255.255.255.0
    GATE: 192.168.1.1
    NTP: 192.168.0.1
    MAC: 44:41:4D:49:41:4E
    Note: UDP open port 6000
    Sending ARP request
    NTP REQUEST
    TCP: Listening on port 65535
    TCP: Outcomming connection on port 65534
    Note: TCP change port 65535 to 65534
    GG: Listening on port 65534
    TCP 0: TIMEDOUT
    GG: Server not responding

    Serwer w wyniku braku odpowiedzi DHCP ustawił adresy z konfiguracji statycznej. Nie ma połączenia z internetem.

    Tekst "PACKET RECEIVED" jest wysyłany przy odebraniu jakiegokolwiek pakietu przez kartę sieciową. Być może karta filtruje pakiety. Dlatego zamieszczam konfiguracje ENC28J60:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Jeżeli dobrze wyczytałem w nocie to taka konfiguracja wpuszcza wszystko, poza pakietami o zbyt dużym rozmiarze.

    Na razie nie mam jak podsłuchać komunikacji między ENC28J60 a AVR; moja pracowania cierpi na deficyt kabli sieciowych. Jak tylko się dorobię to spróbuje zrobić kabel-gwiazdę. :)

    No i na koniec:
    Czemu to tak jest? Co robię źle?
  • Pomocny post
    #2 9395680
    Konto nie istnieje
    Konto nie istnieje  
  • #3 9395699
    damiano713
    Poziom 15  
    Żabek
    Udało mi się uruchomić DHCP z HUAWEI zwiększając rozmiar MTU z 500 bajtów na 800.
    Teraz poprawnie uzyskuje adres od tego routera.
    TPLink nadal nie działa. Na statycznych adresach jest ok, na DHCP milczy.
  • #4 9395849
    Konto nie istnieje
    Konto nie istnieje  
  • #5 9395994
    damiano713
    Poziom 15  
    Tak też zrobię. Znalazłem jakiś sttary switch sieicowy. Dzięki niemu będę mógł podejrzeć pakiety między routerem a ENC.

    Żabek
    Po prostu napisz cokolwiek na numer gg: 32341934
    Hasło do bota: testowe
  • #7 9396976
    damiano713
    Poziom 15  
    Tak wygląda header DHCP
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Pole options jest 312-bajtowe.
  • #8 9397073
    Konto nie istnieje
    Konto nie istnieje  
  • Pomocny post
    #9 9397525
    ostrytomasz
    Poziom 24  
    Nietypowe są tu moim zdaniem ustawiona flaga broadcast (niezalecana wg RFC1542, 3.1.1) i brak opcji client identifier. Porównując z dwoma innymi stosami - nie wysyłają one też Requested IP Address w wiadomości DISCOVER (czy wysyłanie Requested IP Address z wartością 0.0.0.0 nie jest też w ogólności błędem?).
  • #10 9397805
    damiano713
    Poziom 15  
    ostrytomasz
    Akurat tego nie wyczytałem w RFC. Mam nadzieje, że teraz będzie działać.
    Sam klient DHCP był podpatrzony na stronie Ulricha Radiga.
  • #11 9398780
    Konto nie istnieje
    Konto nie istnieje  
  • #12 9400114
    damiano713
    Poziom 15  
    Żabek
    Nie działa nadal. Dzisiaj było testowane z innymi serwerami DHCP.

    Dodałem pole client-identifier. Pole Requested IP Address z awrtoscią 0.0.0.0 nie jest błędem. Mogę tam wpisać jakikolwiek adres IP. Jeżeli routerowi nie odpowiada, to przyzna inny.

    EDIT:

    Panowie, K*******&&*@^$%*^@**!!$@@%$

    Teraz tak patrzę w konfigurację routera TPLink. Okazało się, że nie ma włączonej DHCP. Rrrrrrrrr....

    Teraz wszystko działa jak należy.
    Pozostała złość do samego siebie.

    Dziękuję za uwagę odnośnie client-identifier. Faktycznie to pole jest wstawiane w innych implementacjach DHCP.
  • #13 9401981
    Konto nie istnieje
    Konto nie istnieje  
  • #14 9403894
    damiano713
    Poziom 15  
    Podsumowując:
    Zawsze najlepiej sprawdzić czy jest podpięte zasilanie i włączone DHCP w routerze.

    Pozdrawiam i dziękuję za pomoc.
REKLAMA