GNU/Linux >> Belajar Linux >  >> Linux

penambahan protokol jaringan baru di kernel linux

Untuk menangani komunikasi dari ruang pengguna ke protokol Anda, daftarkan protokol Anda dengan API soket kernel. Ini memungkinkan Anda membuat soket normal dari ruang pengguna.

Lihat penerapan soket bluetooth/RFCOM untuk contoh kode yang relevan.

static const struct proto_ops rfcomm_sock_ops = {
     .family         = PF_BLUETOOTH,
     .owner          = THIS_MODULE,
     .bind           = rfcomm_sock_bind,
     .connect        = rfcomm_sock_connect,
     .listen         = rfcomm_sock_listen,
     .
     .
     .
     .accept         = rfcomm_sock_accept,

};
 
static const struct net_proto_family rfcomm_sock_family_ops = {
     .family         = PF_BLUETOOTH,
     .owner          = THIS_MODULE,
     .create         = rfcomm_sock_create
};

Untuk mendaftarkan protokol, Anda harus mengisi struktur proto_ops. Struktur ini mengikuti pola berorientasi objek yang diamati di tempat lain di dalam kernel. Struktur ini menentukan antarmuka yang harus diikuti oleh pengembang yang mengimplementasikan antarmuka soket mereka sendiri.

Implementasikan fungsi yang didefinisikan antarmuka seperti ikat, sambungkan, dengarkan, dan tetapkan penunjuk fungsi ke entri struktur. Tentukan ioctl untuk fungsionalitas yang tidak dicakup oleh antarmuka operasi.

Anda berakhir dengan struktur yang nantinya Anda sematkan di struktur soket yang kami kembalikan dari fungsi buat.

Struct net_proto_family mendefinisikan keluarga protokol baru. Struktur ini menyertakan fungsi buat di mana implementasi fungsi Anda harus mengisi struktur soket yang diisi dengan struktur proto_ops.

Setelah itu daftarkan keluarga dengan sock_register, dan jika semuanya baik-baik saja, Anda seharusnya dapat membuat soket yang tepat dari ruang pengguna.

Secara internal, protokol mungkin harus menggunakan skbuffs (lihat di sini, dan di sini) untuk berkomunikasi dengan perangkat jaringan.

skbuffs adalah cara universal untuk menangani paket jaringan di kernel linux. Paket diterima oleh kartu jaringan, dimasukkan ke dalam beberapa skbuff, lalu diteruskan ke tumpukan jaringan, yang selalu menggunakan skbuff.

Ini adalah struktur data dasar dan jalur io untuk mengimplementasikan protokol jaringan di dalam kernel linux.

Saya tidak mengetahui adanya dokumen yang menjelaskan prosedur ini dari awal hingga akhir. Sumbernya ada bersama Anda untuk yang satu ini.


Linux
  1. Analisis kernel Linux dengan ftrace

  2. Permainan nama:Memberi nama antarmuka jaringan di Linux

  3. Linux – Mengapa Kernel Tidak Dapat Menjalankan Init?

  1. Kernel Linux:5 inovasi teratas

  2. Siklus hidup pengujian kernel Linux

  3. Pengujian integrasi berkelanjutan untuk kernel Linux

  1. Cara menggunakan perintah mtr Linux

  2. Menantikan konfigurasi jaringan Linux di ramdisk awal (initrd)

  3. Apakah Anda mengizinkan protokol X di jaringan Anda?