This shows you the differences between two versions of the page.
|
rl:labs:10 [2025/12/08 13:56] vlad_andrei.badoiu [Netlink] |
rl:labs:10 [2025/12/08 14:06] (current) vlad_andrei.badoiu [Utilizare] |
||
|---|---|---|---|
| Line 57: | Line 57: | ||
| De asemenea, se pot folosi apelurile de sistem din Linux pentru a interacționa cu API-ul de bridge. Sunt două metode: prin **IOCTL** (varianta veche) și prin socket-uri **Netlink**. Mai jos este un exemplu cu IOCTL. | De asemenea, se pot folosi apelurile de sistem din Linux pentru a interacționa cu API-ul de bridge. Sunt două metode: prin **IOCTL** (varianta veche) și prin socket-uri **Netlink**. Mai jos este un exemplu cu IOCTL. | ||
| + | <spoiler ioctl_create_bridge.c> | ||
| <code C> | <code C> | ||
| #include <stdio.h> | #include <stdio.h> | ||
| Line 87: | Line 88: | ||
| } | } | ||
| </code> | </code> | ||
| + | </spoiler> | ||
| ==== VETH ==== | ==== VETH ==== | ||
| Line 275: | Line 276: | ||
| </code> | </code> | ||
| - | Acum putem scrie mesaje în clientul din ''ns1'' și acestea vor apărea în serverul din ''ns2'', demonstrând comunicarea completă între cele două namespace-uri izolate prin intermediul bridge-ului.] | + | Acum putem scrie mesaje în clientul din ''ns1'' și acestea vor apărea în serverul din ''ns2'', demonstrând conectivitatea între cele două namespace-uri izolate prin intermediul bridge-ului. |
| ==== Netlink ==== | ==== Netlink ==== | ||
| Netlink este un API din Linux utilizat pentru comunicarea inter-proces (IPC) atât între kernel și procesele userspace, cât și între diferite procese userspace, într-un mod similar socket-urilor de domeniu Unix. | Netlink este un API din Linux utilizat pentru comunicarea inter-proces (IPC) atât între kernel și procesele userspace, cât și între diferite procese userspace, într-un mod similar socket-urilor de domeniu Unix. | ||
| + | |||
| + | Introdus inițial pentru a rezolva problema ioctl-urilor (API-ul de ''ioctl'' necesita modificări în kernel pentru fiecare nou protocol de comunicare), Netlink este mecanism extensibil de comunicare între spațiul utilizator și kernel. Spre deosebire de ''ioctl'', Netlink permite adăugarea de noi funcționalități fără a modifica codul kernel-ului, evitând astfel procesul de aprobare și integrare în kernel. Acesta a fost ulterior adaptat pentru a interacționa cu mai multe subsisteme. | ||
| La fel ca socket-urile de domeniu Unix și spre deosebire de socket-urile INET, comunicarea Netlink nu poate traversa granițele gazdei. Netlink oferă o interfață standard bazată pe socket-uri pentru procesele userspace și un API pentru nucleu destinat utilizării interne de către modulele nucleului. Inițial, Netlink a folosit familia de socket-uri AF_NETLINK. Netlink este conceput pentru a fi un succesor mai flexibil al ioctl; RFC 3549 descrie protocolul în detaliu. | La fel ca socket-urile de domeniu Unix și spre deosebire de socket-urile INET, comunicarea Netlink nu poate traversa granițele gazdei. Netlink oferă o interfață standard bazată pe socket-uri pentru procesele userspace și un API pentru nucleu destinat utilizării interne de către modulele nucleului. Inițial, Netlink a folosit familia de socket-uri AF_NETLINK. Netlink este conceput pentru a fi un succesor mai flexibil al ioctl; RFC 3549 descrie protocolul în detaliu. | ||
| Line 285: | Line 288: | ||
| Netlink este folosit, printre altele, de ''ip route'' sau ''iptables''. Mai jos gasim un exemplu de cod ce face toggle up <-> down la ''some_interface''. | Netlink este folosit, printre altele, de ''ip route'' sau ''iptables''. Mai jos gasim un exemplu de cod ce face toggle up <-> down la ''some_interface''. | ||
| + | <spoiler switch_inferface_state.c> | ||
| <code C> | <code C> | ||
| #include <stdio.h> | #include <stdio.h> | ||
| Line 411: | Line 415: | ||
| * Apelează sendmsg | * Apelează sendmsg | ||
| + | <code bash> | ||
| + | > gcc switch_interface_state.c -o switch_interface_state | ||
| + | > ip a show some_interface | ||
| + | > sudo ./switch_interface_state | ||
| + | > ip a show some_interface | ||
| + | </code> | ||
| + | |||
| + | </spoiler> | ||
| ==== Exercitii ==== | ==== Exercitii ==== | ||