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.