mbuf et trame ethernet

SuperCed

Membre expert
Club iGen
20 Juin 2001
1 353
72
46
superced.rb38.eu
Bonjour,

Je suis en train de faire un driver modem usb adsl. Je dois faire transiter des paquet ethernet sur le bus usb.

Cependant, j'ai un probleme qui concerne le reseau.
Je recois un paquet de type mbuf de BSD, il faut que j'envoie un paquet ethernet sur le bus USB.

Le probleme, c'est que je ne sais absolument pas si ce mbuf correspond vraiment a une trame ethernet.

En fait, voila a quoi ressemble mon code :

m = pkt;
while (m)
{
total_pkt_length += m->m_len;
numbufs++;
m = m->m_next;
}

m = pkt;
rTotal = 0;
do
{
if (m->m_len == 0)
continue;

bcopy(mtod(m, unsigned char *), &fPipeOutBuffer[rTotal], m->m_len);
rTotal += m->m_len;

} while ((m = m->m_next) != 0);
IOLog("fPipeOutBuffer : %d \n", rTotal);
for (int i=0;i<rTotal;i++) {
IOLog("%d ",(int)fPipeOutBuffer);
}
IOLog("end of buffer\n");
fWriteCompletionInfo.parameter = pkt;
fPipeOutMDP->setLength(rTotal);
ior = fOutPipe->Write(fPipeOutMDP, &fWriteCompletionInfo);

Voila ce que j'ai dans le log :

fPipeOutBuffer : 36
Mar 10 08:58:58 Ordinateur-de-SuperCed mach_kernel: 255 255 255 255 255 255 0 1 2 3 4 5 136 99 17 9 0 0 0 16 1 1 0 0 1 2 0 0 1 3 0 4 2 52 108 4 end of buffer

Le buffer fait 36 octets. Ca m'etonne car normalement, une trame ethernet doit faire au moins 64 octets d'apres la doc que j'ai pu lire.

Voila ma doc :

Destination : 2 a 6 octets
Source : 2 a 6 octets
Longueur : 2 octets
Donnees LLC : 46 a 1500 octets
PAD : cette zone sert, a priori a remplir la trame ethernet pour que celle ci fasse 64 octets, donc ca rajoute des octets a LLC pour atteindre 46 octets
CRC : 4 octets : polynome cyclique tel que g(x) = x32 + x26 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x1.


Le debut du paquet semble tout a fait bon, l'adresse de destination et la source sont bons. Par contre, apres, je suis incapable de dire si cela correspond... Mais il me semble vraiment bizare que la trame fasse 36 octets.

Donc si le paquet mbuf est different d'une trame ethernet, comment puis-je mettre construire ma trame ethernet a partir du mbuf?

Et dans le cas ou le CRC n'est pas calculer, comment puis-je faire, je ne m'y connais pas trop en correction d'erreur...

Merci de votre aide.