Network Paket : sk_buff

     struct sk_buff di definisikan di <linux/skbuff.h>. struct sk_buff merupakan representasi dari paket data pada jaringan, isinya cukup rumit dan banyak sekali.



     struct sk_buff digunakan saat melakukan transmisi atau receive paket. Pada network device saat melakukan transmisi data struct sk_buff telah di sediakan oleh kernel pada saat fungsi ndo_start_xmit dipanggil, tapi kita masih tetap bisa merubah beberapa fieldnya. Sedangkan saat melakukan receive, pada network device kita harus menyiapkan struct sk_buffnya untuk kemudian di teruskan ke fungsi netif_rx dan familynya yang lain untuk kemudian di olah untuk menerima paket yang di receive.

     Detil-detil bagaimana kernel menyiapkan struct sk_buff saat melakukan transmisi atau bagaimana kernel mengolah struct sk_buff yang di buat dan di teruskan ke netif_rx dan familinya yang lain melibatkan fungsi-fungsi manajemen struct sk_buff seperti : skb_put, skb_pull, skb_push dan skb_reserve. Keempat fungsi itu pada dasarnya hanya memanipulasi pointer-pointer yang ada di struct sk_buff seperti :


     end dan tail adalah pointer yang menunjuk pada ujung dari alokasi buffer (akan di jelaskan berikutnya nanti) dan ujung dari data yang sebenarnya. sedangkan head dan data adalah pointer yang menunjuk pada awal dari alokasi buffer dan awal dari data yang sebenarnya. untuk mempermudah ilustrasinya seperti begini :





     Jadi, sebenarnya pada saat membuat struct sk_buff memakai fungsi dev_alloc_skb. Dalam fungsi itu kernel membuat struct sk_buff dan memori buffer yang akan menanmpung data sebenarnya dari paket yang akan dikirim atau diterima. Di buffer inilah frame paket data akan disusun sesuai protokol, seperti contoh berikut protokol UDP :



     Selain berisi paket data yang sebenarnya yang di transmisikan atau di terima, memori buffer ini juga menampung struct skb_shared_info. Ilustrasinya eperti berikut ini :



     Padding di ilustrasi untuk meningkatkan performa. informasi dari struct skb_shared_info ini berguna untuk scatter/gather IO, maksudnya data-data yang akan melakukan operasi IO tidak berada pada memori contigous atau menyebar kemana-mana di memori. kodenya adalah :


Komentar