<div dir="ltr">Codul din af_packet.c pentru packet_sendmsg e destul de complicat și presupun că are multe părți care nu sunt necesare.<div><br></div><div style>Din ce am înțeles pașii de făcut sunt:</div><div style><br></div>
<div style>1. obținerea datelor despre dispozitivul și portul către care trebuie trimis pachetul (din structura noastră sock dacă există, sau alternativ din sockaddr_stp)</div><div style><br></div><div style>2. alocarea unui skb pentru pachetul de trimis, cu sock_alloc_send_pskb care să aibă spațiu rezervat pentru header (apropo, aici modul îl luăm din msg->msg_flags ca în exemplu sau presupunem o variantă?)</div>
<div style>Asta ar fi de dimensiune len + sizeof(struct sockaddr_stp).</div><div style><br></div><div style>3. scrierea headerului și a corpului; aici sunt nelămurit cum anume merge asta. Aș zice că la început scriem headerul stp_hdr și apoi corpul în câmpul skb->data... Dar în af_packet sunt tot felul de apeluri skb_set_network_header() sau skb_reset_mac_header().</div>
<div style>Ar trebui să facem ceva cu push/pull ca în curs?</div><div style>Cred că putem scrie direct la offset-urile corecte headerul și datele...</div><div style>Deși, mă întreb dacă skb-ul poate fi fragmentat?</div><div style>
<br></div><div style>4. dev_queue_xmit() ca să fie adăugat în coada de transmisie</div><div style><br></div><div style>Bănuiesc că putem ignora alte lucruri mai complicate.</div><div style><br></div><div style>Mulțumesc! :)</div>
</div>