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

NOMBRE

       netlink, PF_NETLINK - Comunicación entre el núcleo 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ÓN

       Netlink  se  utiliza  para transferir información entre los módulos del
       núcleo y los procesos del espacio de usuario. Consiste en una  interfaz
       basada  en conectores estándares para los procesos de usuario y una API
       del núcleo interna para los módulos del núcleo. La interfaz del  núcleo
       interna  no  se  documenta en esta página de manual. También existe una
       interfaz netlink obsoleta mediante dispositivos de caracteres  netlink.
       Esta   interfaz  no  se  documenta  aquí  y  sólo  se  proporciona  por
       compatibilidad hacia atrás.

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

       netlink_family  selecciona  el módulo del núcleo 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 código del cortafuegos de IPv4.

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

       NETLINK_ROUTE6
              Recibe y envía actualizaciones a la  tabla  de  enrutamiento  de
              IPv6.

       NETLINK_IP6_FW
              Para  recibir los paquetes que no pasarón 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  más
       cabeceras  nlmsghdr  y  sus cargas útiles asociadas.  Para los mensajes
       multiparte, la primera cabecera  y  las  siguientes  tienen  activa  la
       opción  NLM_F_MULTI,  excepto  la  última  cabecera,  que tiene el tipo
       NLMSG_DONE.  El flujo de bytes sólo debería ser accedido con las macros
       estándares 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  opción  NLM_F_ACK.   Un
       reconocimiento es un paquete NLMSG_ERROR cuyo campo de error vale 0. La
       propia  aplicación  debe  generar  reconocimientos  para  los  mensajes
       recibidos.  El  núcleo  intenta  enviar  un  mensaje  NLMSG_ERROR  para
       cualquier  paquete  que  falle.  Un  proceso de usuario también debería
       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 máscara  de  bits
       de  los  grupos  que se desea escuchar.  El valor por omisión para este
       campo es cero, lo que significa que no se recibirán multidestinos.

       Un conector puede enviar un mensajes con varios destinos  a  cualquiera
       de  los  grupos multidestino, asignando a nl_groups una máscara de bits
       de los grupos a los que desea enviar cuando llama a sendmsg(2)  o  hace
       un  connect(2).   Sólo  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;  /* Número de secuencia */
                  __u32    nlmsg_pid;  /* PID del proceso que abrió el conector */
              };

              struct nlmsgerr
              {
                  int      error;      /* número de error negativo o 0
                                          para reconocimientos */
                  struct nlmsghdr msg; /* cabecera del mensaje que
                                          provocó el error */
              };

       Después de cada nlmsghdr viene la carga útil.  nlmsg_type puede ser uno
       de los tipos de mensajes estándares:

       NLMSG_NOOP
              Se va a ignorar el mensaje.

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

       NLMSG_DONE
              El mensaje termina un mensaje multiparte.

       Una  familia  netlink normalmente especifica más tipos de mensajes. Vea
       las páginas de manual adecuadas para ello.  Por  ejemplo,  rtnetlink(7)
       para NETLINK_ROUTE.

       +-----------------------------------------------------------------+
       |           Bits de opciones estándares 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 éxito |
       +--------------+--------------------------------------------------+
       |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  única |
       |             | entrada.                                            |
       +-------------+-----------------------------------------------------+
       |NLM_F_MATCH  | Todavía no implementado.                            |
       +-------------+-----------------------------------------------------+
       |NLM_F_ATOMIC | Devolver una copia instantánea atómica de la tabla. |
       +-------------+-----------------------------------------------------+
       |NLM_F_DUMP   | Todavía 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  | Añadir 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  núcleo. Una sockaddr_nl puede ser o bien unidestino
       (envío a un único igual) o bien un envío 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;    /* Máscara de grupos
                                               mutlidirección */
              };

       nl_pid  es el PID del proceso propietario del conector destinatario o 0
       si el destino está en el núcleo.  nl_groups es una máscara de bits  con
       cada bit representando a un número de grupo netlink.

FALLOS

       Esta página de manual no está completa.

OBSERVACIONES

       Normalmente  es  mejor usar netlink mediante libnetlink que mediante la
       interfaz de bajo nivel del núcleo.

VERSIONES

       La interfaz de conectores netlink es una  nueva  característica  de  la
       versión 2.2 de Linux.

       La  versión  2.0  de Linux soportaba una interfaz netlink más primitiva
       basada   en   dispositivos   (que   todavía   está    disponible    por
       compatibilidad). Esta interfaz obsoleta no se describe aquí.

VÉASE TAMBIÉN

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

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