AVR i pakiegy ARP

Feb 18, 2010 2 Replies

Witam. Próbuję stworzyć prosty serwerek www który ma też być jednocześnie klientem NTP i stanąłem na stosie w miejscu gdzie są przetwarzane pakiety ARP. Chodzi o to że mam mało pamięci ram i muszę wysyłać pakiety ARP request bez buforowania ramek. Naczytałem się że normalnie jest tak że chcąc wysłać pakiet udp do adresu



192.168.1.1 muszę znać jego adres MAC. Więc sprawdzam w tablicy arp i jak nie ma to wysyłam ARP request. Buforuję pakiet i czekam na odpowiedź ARP replay. I właśnie tu jest problem bo jeśli w trakcie tego czekania odbiorę jakiś pakiet HTTP to nie będę mógł na niego odpowiedzieć bo nadpiszę dane poprzedniego pakietu UDP. W komputerach z dużą ilością ramu jest to możliwe ale nie w AVRku.

Moje pytanie. Czy zgodne z zasadami jest abym pakiety UDP dla adresów IP dla których nie mam adresu MAC w tablicy wysyłał z adresem docelowym MAC=0xFFFFFFFFFFFF i adresem ip=192.168.1.1? Czy w takim przypadku komputer doceolowy powinien odebrać pakiet? Nie musiałbym buforować pakietów wychodzących.



Ewentualnie czy jest jakieś inne lepsze rozwiązanie?



Dzięki za pomoc grundolf


W dniu 2010-02-18 12:02, grundolf pisze:

Powinien odebrać. Datagram przejdzie przez filtr MAC jako skierowany do wszystkich (broadcast), a potem na poziomie parsowania nagłówka IP całość zostanie rozpoznana poprawnie. Tyle że tak skonstruowane ramki nie wyjdą poza sieć lokalną (router nie łyka ramek broadcastowych zwykle). Ale i tak najpierw sprawdziłbym w praktyce, jak się zachowa przeciętny pecet.

Właściwie znalazłem takie rozwiązanie w bibliotece Procyon AVRlib gdy nie znajduje wpisu w tablicy arp to wysyłany jest na adres broadcast. Adres MAC zdalnego hosta zapamiętywany jest tylko w przypadku gdy jest odpowiedz arp reply lub zapytania arp request.

Z buforowaniem natomiast jest już Ethernut ale tam do dyspozycji jest więcej ramu, czas oczekiwania ustawiony jest na 500ms.

Pozdrawiam grundolf

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required