GNU/Linux >> Znalost Linux >  >> Linux

přidání nového síťového protokolu do linuxového jádra

Chcete-li zvládnout komunikaci z uživatelského prostoru do svého protokolu, zaregistrujte svůj protokol pomocí rozhraní API kernel sockets. To vám umožní vytvořit normální soket z uživatelského prostoru.

Podívejte se na implementaci soketu bluetooth/RFCOM pro relevantní ukázky kódu.

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
};

Chcete-li zaregistrovat protokol, budete muset vyplnit strukturu proto_ops. Tato struktura sleduje objektově orientovaný vzor pozorovaný jinde uvnitř jádra. Tato struktura definuje rozhraní, které se bude řídit vývojáři implementujícími vlastní soketové rozhraní.

Implementujte funkce, které rozhraní definuje, jako je vazba, připojení, naslouchání a přiřazení ukazatele funkce k položce struktury. Definujte ioctl pro funkce, které nejsou pokryty operačním rozhraním.

Skončíte se strukturou, kterou později vložíte do struktury soketu, kterou vrátíme z funkce create.

Struktura net_proto_family definuje novou rodinu protokolů. Tato struktura zahrnuje funkci create, kde by vaše implementace funkce měla naplnit strukturu soketu vyplněnou strukturou proto_ops.

Poté zaregistrujte rodinu pomocí sock_register a pokud je vše v pořádku, měli byste být schopni vytvořit správný socket z uživatelského prostoru.

Interně by měl protokol pravděpodobně používat skbuffs (viz zde a zde) ke komunikaci se síťovými zařízeními.

skbuffs jsou univerzálním způsobem zpracování síťových paketů v linuxovém jádře. Pakety jsou přijímány síťovou kartou, vloženy do některých skbuffů a poté předány síťovému zásobníku, který skbuff neustále používá.

Toto je základní datová struktura a io cesta k implementaci síťového protokolu uvnitř linuxového jádra.

Neznám žádný dokument, který by popisoval tento postup od začátku do konce. Zdroj je s vámi.


Linux
  1. Jak používat příkaz Linux mtr

  2. Těšíme se na konfiguraci sítě Linux v počátečním ramdisku (initrd)

  3. Povolujete protokol X ve vaší síti?

  1. Linux – Jak lze zkontrolovat informace o struktuře adresářů souboru Unix/linux?

  2. Linux – Proč nemůže jádro spustit inicializaci?

  3. Linux – proprietární nebo uzavřené části jádra?

  1. Jaký je aktuální zdrojový kód jádra Linuxu?

  2. deaktivace protokolu ARP v linuxovém boxu

  3. Jak je do linuxového jádra přidána nová hardwarová podpora?