Provided by: manpages-es_1.55-10_all bug

NOMBRE

       netlink, PF_NETLINK - Comunicacion entre el nucleo y el usuario.

SINOPSIS

       #include <asm/types.h>
       #include <sys/socket.h>
       #include <linux/netlink.h>

       netlink_socket = socket(PF_NETLINK, socket_type, netlink_family);

DESCRIPCI'ON

       Netlink  se  utiliza  para transferir informacion entre los modulos del
       nucleo y los procesos del espacio de usuario. Consiste en una  interfaz
       basada  en conectores estandares para los procesos de usuario y una API
       del nucleo interna para los modulos del nucleo. La interfaz del  nucleo
       interna  no  se  documenta en esta pagina de manual. Tambien existe una
       interfaz netlink obsoleta mediante dispositivos de caracteres  netlink.
       Esta   interfaz  no  se  documenta  aqui  y  solo  se  proporciona  por
       compatibilidad hacia atras.

       Netlink es un servicio orientado  a  datagramas.  Tanto  SOCK_RAW  como
       SOCK_DGRAM  son  valores  validos  para  socket_type.   Sin embargo, el
       protocolo  netlink  no  distingue  entre  conectores  de  datagrama   y
       conectores directos (raw).

       netlink_family  selecciona  el modulo del nucleo o el grupo netlink con
       el que comunicarse.  Las familias netlink asignadas actualmente son:

       NETLINK_ROUTE
              Recibe actualizaciones  de  enrutamiento  y  puede  usarse  para
              modificar la tabla de enrutamiento de IPv4 (vea rtnetlink(7)).

       NETLINK_FIREWALL
              Recibe paquetes enviados por el codigo del cortafuegos de IPv4.

       NETLINK_ARPD
              Para gestionar la tabla ARP en el espacio de usuario.

       NETLINK_ROUTE6
              Recibe  y  envia  actualizaciones  a la tabla de enrutamiento de
              IPv6.

       NETLINK_IP6_FW
              Para recibir los paquetes que no pasaron las comprobaciones  del
              cortafuegos de IPv6 (actualmente no implementado).

       NETLINK_TAPBASE...NETLINK_TAPBASE+15
              Son  las  instancias  del  dispositivo ethertap.  El dispositivo
              ethertap es un pseudodispositivo de tunel  de  red  que  permite
              simular un manejador ethernet desde el espacio de usuario.

       NETLINK_SKIP
              Reservado para ENskip.

       NETLINK_USERSOCK
              Reservado para futuros protocolos en el espacio de usuario.

       Los  mensajes  netlink  consisten  en  un  flujo de bytes con una o mas
       cabeceras nlmsghdr y sus cargas utiles asociadas.   Para  los  mensajes
       multiparte,  la  primera  cabecera  y  las  siguientes tienen activa la
       opcion NLM_F_MULTI, excepto la  ultima  cabecera,  que  tiene  el  tipo
       NLMSG_DONE.  El flujo de bytes solo deberia ser accedido con las macros
       estandares NLMSG_*.  Vea netlink(3).

       Netlink no es un protocolo fiable. Intenta hacerlo lo mejor  que  puede
       para  entregar un mensaje en su destino (o destinos), pero puede perder
       mensajes cuando no hay suficiente memoria o se produce  cualquier  otro
       error.  Para  una  transferencia  fiable,  el emisor puede solicitar un
       reconocimiento  del  receptor  activando  la  opcion   NLM_F_ACK.    Un
       reconocimiento es un paquete NLMSG_ERROR cuyo campo de error vale 0. La
       propia  aplicacion  debe  generar  reconocimientos  para  los  mensajes
       recibidos.  El  nucleo  intenta  enviar  un  mensaje  NLMSG_ERROR  para
       cualquier paquete que falle. Un  proceso  de  usuario  tambien  deberia
       seguir estas convenciones.

       Cada  familia  netlink  tiene  un  conjunto  de  32 grupos multidestino
       (mutlicast).  Cuando se llama a bind(2)  sobre  el  conector,  se  debe
       configurar  el  campo nl_groups de sockaddr_nl como una mascara de bits
       de los grupos que se desea escuchar.  El valor por  omision  para  este
       campo es cero, lo que significa que no se recibiran multidestinos.

       Un  conector  puede enviar un mensajes con varios destinos a cualquiera
       de los grupos multidestino, asignando a nl_groups una mascara  de  bits
       de  los  grupos a los que desea enviar cuando llama a sendmsg(2) o hace
       un connect(2).  Solo los  usuarios  con  un  identificador  de  usuario
       efectivo  0  o la capacidad CAP_NET_ADMIN pueden enviar a o escuchar de
       un grupo  netlink  multidestino.   Cualquier  respuesta  a  un  mensaje
       recibido  por  un  grupo  multidestino se debe enviar de regreso al pid
       emisor y al grupo multidestino.

              struct nlmsghdr
              {
                  __u32    nlmsg_len;  /* Longitud del mensaje incluyendo
                                          la cabecera */
                  __u16    nlmsg_type; /* Contenido del mensaje */
                  __u16    nlmsg_flags;/* Opciones adicionales */
                  __u32    nlmsg_seq;  /* Numero de secuencia */
                  __u32    nlmsg_pid;  /* PID del proceso que abrio el conector */
              };

              struct nlmsgerr
              {
                  int      error;      /* numero de error negativo o 0
                                          para reconocimientos */
                  struct nlmsghdr msg; /* cabecera del mensaje que
                                          provoco el error */
              };

       Despues de cada nlmsghdr viene la carga util.  nlmsg_type puede ser uno
       de los tipos de mensajes estandares:

       NLMSG_NOOP
              Se va a ignorar el mensaje.

       NLMSG_ERROR
              El  mensaje  indica  un  error  y  la  carga  util  contiene una
              estructura nlmsgerr.

       NLMSG_DONE
              El mensaje termina un mensaje multiparte.

       Una familia netlink normalmente especifica mas tipos de  mensajes.  Vea
       las  paginas  de  manual adecuadas para ello. Por ejemplo, rtnetlink(7)
       para NETLINK_ROUTE.

       +-----------------------------------------------------------------+
       |           Bits de opciones estandares en nlmsg_flags            |
       +--------------+--------------------------------------------------+
       |NLM_F_REQUEST | Poner en todos los mensajes de solicitud         |
       +--------------+--------------------------------------------------+
       |NLM_F_MULTI   | El mensaje es parte  de  un  mensaje  multiparte |
       |              | terminado mediante NLMSG_DONE                    |
       +--------------+--------------------------------------------------+
       |NLM_F_ACK     | Responder con un reconocimiento en caso de exito |
       +--------------+--------------------------------------------------+
       |NLM_F_ECHO    | Hacer eco de esta solicitud                      |
       +--------------+--------------------------------------------------+

       +-------------------------------------------------------------------+
       |         Bits de opciones adicionales para peticiones GET          |
       +-------------+-----------------------------------------------------+
       |NLM_F_ROOT   | Devolver  la  tabla  completa en lugar de una unica |
       |             | entrada.                                            |
       +-------------+-----------------------------------------------------+
       |NLM_F_MATCH  | Todavia no implementado.                            |
       +-------------+-----------------------------------------------------+
       |NLM_F_ATOMIC | Devolver una copia instantanea atomica de la tabla. |
       +-------------+-----------------------------------------------------+
       |NLM_F_DUMP   | Todavia no documentado.                             |
       +-------------+-----------------------------------------------------+

       +--------------------------------------------------------+
       |   Bits de opciones adicionales para peticiones NEW     |
       +--------------+-----------------------------------------+
       |NLM_F_REPLACE | Reemplazar un objeto existente.         |
       +--------------+-----------------------------------------+
       |NLM_F_EXCL    | No reemplazar si el objeto ya existe.   |
       +--------------+-----------------------------------------+
       |NLM_F_CREATE  | Crear un objeto sin no existe ya.       |
       +--------------+-----------------------------------------+
       |NLM_F_APPEND  | Anadir al final de la lista de objetos. |
       +--------------+-----------------------------------------+
       Dese cuenta que  NLM_F_ATOMIC  requiere  CAP_NET_ADMIN  o  derechos  de
       superusuario.

FORMATOS DE LAS DIRECCIONES

       La  estructura sockaddr_nl describe un cliente netlink en el espacio de
       usuario o en el nucleo. Una sockaddr_nl puede  ser  o  bien  unidestino
       (envio  a  un  unico igual) o bien un envio a grupos netlink (nl_groups
       distinto de 0).

              struct sockaddr_nl
              {
                  sa_family_t nl_family;    /* AF_NETLINK */
                  unsigned short nl_pad;    /* cero */
                  pid_t       nl_pid;       /* PID del proceso */
                  __u32       nl_groups;    /* Mascara de grupos
                                               mutlidireccion */
              };

       nl_pid es el PID del proceso propietario del conector destinatario o  0
       si  el destino esta en el nucleo.  nl_groups es una mascara de bits con
       cada bit representando a un numero de grupo netlink.

FALLOS

       Esta pagina de manual no esta completa.

OBSERVACIONES

       Normalmente es mejor usar netlink mediante libnetlink que  mediante  la
       interfaz de bajo nivel del nucleo.

VERSIONES

       La  interfaz  de  conectores  netlink es una nueva caracteristica de la
       version 2.2 de Linux.

       La version 2.0 de Linux soportaba una interfaz  netlink  mas  primitiva
       basada    en    dispositivos   (que   todavia   esta   disponible   por
       compatibilidad). Esta interfaz obsoleta no se describe aqui.

V'EASE TAMBI'EN

       cmsg(3), rtnetlink(7), netlink(3)

       ftp://ftp.inr.ac.ru/ip-routing/iproute2* para libnetlink

Pagina man de Linux              27 abril 1999                      NETLINK(7)