velikost link layer hlavicky v bpf
    Dan Lukes 
    dan at obluda.cz
       
    Wed Feb  4 23:42:34 CET 2004
    
    
  
Radim Kolar wrote:
>>	Mozna nerozumim dostatecne otazce - ale pokud vim jakou hlavicku 
>>	jsem dostal, tak snad je jasne jakou ma velikost (u hlavicek s konstantni 
> 
> znam typ linku DLT_* (viz bpf.h) a potrebuju vedet kolik bajtu musim
> preskocit abych se dobral k ip hlavicce.
... za predpokladu, ze ziskany paket vubec nese, na treti vrstve, IP 
paket ...
	No tak to jsme otazku pochopil spravne.  Preskocit musite jednak 
hlavicku samotneho BPF (ktera ma delku bh_hdrlen) a pak linkovou hlavicku.
	Linkova hlavicka je ruzna podle toho, pres jakou linkovou vrstvu 
prisla. Napriklad pro DLT_NULL a DLT_RAW tam takova hlavicka vubec neni 
a jeji delka je tedy nula.
	Priznam se ale, ze nejsem schopen ted z hlavy vysypat delky linkovych 
hlavicek vsech protokolu, ktere bpf zna - uz proto ne, ze delky 
nekterych z nich (mam dojem, ze napriklad DLT_PPP) nejsou konstantni.
	Budete muset najit popis konkretniho protokolu a z nej delku linkove 
hlavicky pro ten konkretni protokol precist. Nektere z nich by se asi 
daly najit i v headerech /usr/include/net/*.
	Nebo budete muset najit nekoho, kdo to v hlave nosi ...
	Ja vam muzu pomoci u Ethernetu - delka linkove hlavicky je (z 
net/ethernet.h) ETHER_HDR_LEN (=14); pokud v ni, v polozce ether_type 
naleznete hodnotu ETHERTYPE_IP pak byste, skutecne, preskocenim teto 
delky mel ziskat prvni byte IP paketu. Pokud v ether_type tato hodnota 
neni, pak se pravdepodobne o IP paket nejedna, ledaze je ether_type<1500 
a na linkove vrstve se pouziva Ethernet_802.3 encapsulace. V takovem 
pripade je typ encapsulovanych dat dan "napevno" konfiguraci cele site a 
muze (a nebo nemusi) to byt IP.
  	U jinych linkovych vrstev budou, pochopitelne, delky i algoritmy jine ...
	Doufam, ze takhle to pomuze.
					Dan
    
    
More information about the Users-l
mailing list