Problem s pristupem k skb->mac.ethernet->h_source ?

Dalibor Toman dtoman na fortech.cz
Čtvrtek Říjen 4 18:07:09 CEST 2001


DD,

Snazim se trosku vylepsit logovani paketu z IPchainu. Protoze
potrebuju znackovat
pakety pro jejich pozdejsi trideni do front v CBQ shaperu, chybelo mi
ze se neloguje
prave pridelena znacka k paketu. Modifikovat prislusnou cast zdrojaku
ipchainu
(ip_fw.c - dump_packet() ) se mi celkem povedlo a problemy jsem
nezaznamenal.
Pak jsem si rekl, ze by bylo krasny, kdyby se jeste logovala i
zdrojova MAC adresa
packetu (pri detekovani nekterych problematickych stavu  je k nicemu,
ze se
zalogovala IP adresa zdroje - podle ni se neda nic najit a na tcpdump
uz muze byt
pozde). Uprava se mi temer povedla - nebyt toho, ze pri tom logovani
cas od casu
spadne kernel, jindy nejaka aplikace a jindy se chainy zacnou chovat
divne. Protoze
je MAC pristupna pres pointer je mozne, ze je pro ni alokovana
separatni pamet a
v nekterych pripadech pointr na ni neni platny (nulovost testuju) a
pak ctu nekde
buhvi odkud.

K logovani MACky pouzivam nasledujici kod - nejsem CCkar a urcite to
jde napsat
lip. Cely upraveny ip_fw.cz jsem vystavil na
ftp://ftp.lit.cz/linux/ip_fw.c (upravy se tykaji
parametru a obsahu dump_packet() a ip_fw_domatch() ze ktere se
dump_packet() vola
(vola se i odjinud ale tam jsem jen pripsal parametry)


       if (skb->mac.ethernet)
        {

printk(",srcMAC:%2.2hX:%2.2hX:%2.2hX:%2.2hX:%2.2hX:%2.2hX\n",
                       skb->mac.ethernet->h_source[0],
                       skb->mac.ethernet->h_source[1],
                       skb->mac.ethernet->h_source[2],
                       skb->mac.ethernet->h_source[3],
                       skb->mac.ethernet->h_source[4],
                       skb->mac.ethernet->h_source[5]);
        }
        else
        {
                printk(",srcMAC: nil pointer to address buffer\n");
        };

Pozn: Nikdy jsem v logu nevidel zeby nastal stav skb->mac.ethernet ==
0

najde se nekdo, kdo mi rekne co delam spatne?
Mlcky predpokladam, ze skb nebude nikdy 0 ale mozna to je chybny
predpoklad...

Zdravi
D. Toman




Další informace o konferenci Linux