Hej
Til et projekt, jeg er i gang med, skal jeg grappe pakker lige over MAC
laget. Til dette formål bruger jeg pcap (libpcap). I den forbindelse er
jeg løbet ind i et par spørgsmål, jeg ikke umiddelbart har kunnet finde
svar på.
1. I et paper om BSD packet filter (som pcap benytter) fra 1993, har jeg
kunnet læse, at indkomne pakker opsnappes direkte fra device dirveren
(køres gennem BSD filter) inden den sendes videre op gennem
protokolstakken. Denne oplysning afføder to spørgsmål:
a) Hvor starter denne protokol stak rent faktisk? Hvad er interfacet
mellem protokol stakken og device driveren? Er vi kommet helt gennem MAC
laget?
b) Opsnappes pakken på helt samme sted (dvs. lige mellem stakken og
device driveren, når en pakke sendes fra computeren, pcap kører på?
Pcap angiver en timestamp for hver opsnappet pakke. Efter at have
gransket kildekoden lidt, er jeg kommet frem til, at pcap får dette
stamp via et ioctl kernel kald med request code SIOCGSTAMP. Så vidt, så
godt. Dette timestamp har jeg fundet frem til må stamme fra sk_buff
strucket defineret i <linux/sk_buff.h> (en instans "oprettes" til hver
pakke). Spørgsmålet er nu så:
c) Hvor og hvornår gives denne stamp i sk_buff værdi?
Håber på svar fra jer kvikke hoveder derude...
Skulle nogle af jer have lidt svært ved at følge mig, så er her en lille
tegning. Det er altså tiden ved MAC-laget pakker der både sendes og
modtages skal registeres. Tiden over APP laget har jeg ingen probelmer
med at måle.
COMP
--------- <--- tid måles her
| APP |
---------
| TRANS |
---------
| IP |
--------- <-- tid måles her (PCAP)
| MAC |
---------
| PHY |
---------
/Jeppe
|