Differences

This shows you the differences between two versions of the page.

Link to this comparison view

rl:labs:10 [2025/12/08 13:49]
vlad_andrei.badoiu
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 404: Line 408:
 </​code>​ </​code>​
  
 +Codul de mai sus:
 +  * Deschide un socket cu AF_NETLINK ca familie
 +  * Setează id-ul adresei la 0 (pentru kernel)
 +  * Creează antetul standard al mesajului
 +  * Atașează payload-ul corect (incluzând ifinfomsg și numele NIC-ului)
 +  * 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 ====
  
rl/labs/10.1765194572.txt.gz · Last modified: 2025/12/08 13:49 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0