erlug
[Top] [All Lists]

[Erlug] net core processing

To: "erlug" <erlug@xxxxxxxxxxxxxx>
Subject: [Erlug] net core processing
From: "dragonlair@xxxxxxxxx" <dragonlair@xxxxxxxxx>
Date: Thu, 13 May 2004 11:07:56 +0200
Salve a tutti,
   sto studiando il network core processing del kernel 2.4.20 e mi sono sorti
dei dubbi: per ora ho capito che quando una scheda di rete riceve un pacchetto
genera un unterrupt e parte un handler per gestirlo. Nell'ordine vengono
eseguite queste operazioni:
1- gli interrupt sono disabilitati
2- viene allocato un sk_buff
3- tramite DMA viene prelevato il frame dal buffer della scheda e viene inserito
nell'area di memoria associata all'sk_buff
4- viene richiamata la funzione netif_rx() che assegna al nuovo frame un
descrittore che viene mantenuto nell'rx_ring
5- sempre la funzione netif_rx() inserisce un puntatore al device che ha
ricevuto il frame in una polling list e poi assegna un softirq al pacchetto.
6- qui non capisco bene cosa succede. Da quanto ho letto, l'handler del softirq
accede alla polling list per prelevare i descrittori contenuti in rx_ring e
interrogando i vari device (es eth0, eth1, ecc) per verificare se questi hanno
frame da consegnare.
Ma perche' vengono interrogati i device? I loro framess non li hanno gia'
passati al OS? Io mi aspettavo che il softirq handler prelevasse i descrittori
dal rx_ring e basta (piu' o meno come avviene nei kernel da 2.4.0 a 2.4.19 anche
se si parla di backlog queue che nel 2.4.20 non c'e').
Spero di essermi spiegato bene (non ho ancora ben capito tutta sta roba)
Grassie

Simone Saravalli


<Prev in Thread] Current Thread [Next in Thread>
  • [Erlug] net core processing, dragonlair@xxxxxxxxx <=