grundolf
Guest
Thu Feb 18, 2010 12:02 pm
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
--
Wysłano z serwisu OnetNiusy:
http://niusy.onet.pl
Adam Dybkowski
Guest
Thu Feb 18, 2010 1:52 pm
W dniu 2010-02-18 12:02, grundolf pisze:
Quote:
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?
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.
--
Adam Dybkowski
http://dybkowski.net/
Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.
grundolf
Guest
Thu Feb 18, 2010 2:26 pm
Quote:
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
--
Wysłano z serwisu OnetNiusy:
http://niusy.onet.pl
Marcin Wasilewski
Guest
Thu Feb 18, 2010 2:35 pm
Użytkownik "grundolf" <grundolf@poczta.onet.pl> napisał w wiadomości
news:5065.00000232.4b7d1e3e@newsgate.onet.pl...
Quote:
Ewentualnie czy jest jakieś inne lepsze rozwiązanie?
Dzięki za pomoc
Zawsze można się pokusić na jakiegoś AVR-ka, którego można pogonić z
zewnętrzną pamięcią RAM, wtedy masz prawie 64K do dyspozycji, a jak się
pokombinuje ze zmianą banków to i wielokrotność tego.
Adam Dybkowski
Guest
Mon Feb 22, 2010 9:16 pm
W dniu 2010-02-18 14:35, Marcin Wasilewski pisze:
Quote:
Ewentualnie czy jest jakieś inne lepsze rozwiązanie?
Dzięki za pomoc
Zawsze można się pokusić na jakiegoś AVR-ka, którego można pogonić z
zewnętrzną pamięcią RAM, wtedy masz prawie 64K do dyspozycji, a jak się
pokombinuje ze zmianą banków to i wielokrotność tego.
Heh, właśnie taki jest Ethernut 1.3 (ATmega128 + ext RAM + Realtek Eth).
--
Adam Dybkowski
http://dybkowski.net/
Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.