Provided by: manpages-fr_4.23.1-1_all bug

NOM

       vsock – Famille d’adresses VSOCK de Linux

SYNOPSIS

       #include <sys/socket.h>
       #include <linux/vm_sockets.h>

       stream_socket = socket(AF_VSOCK, SOCK_STREAM, 0);
       datagram_socket = socket(AF_VSOCK, SOCK_DGRAM, 0);

DESCRIPTION

       La  famille  d’adresses  VSOCK simplifie la communication entre des machines virtuelles et
       l’hôte sur lesquelles elles s’exécutent. Cette famille d’adresses  est  utilisée  par  les
       agents  clients et les services d’hyperviseur ayant besoin d’un canal de communication qui
       soit indépendant de la configuration réseau de la machine virtuelle.

       Les types de socket autorisés sont SOCK_STREAM et SOCK_DGRAM. SOCK_STREAM fournit des flux
       d’octets  orientés  connexion,  avec  leur  distribution  garantie  et  dans le bon ordre.
       SOCK_DGRAM  fournit  un  service  de  paquets  de  datagrammes  sans  connexion  avec  une
       distribution au mieux et un ordre au mieux. La disponibilité de ces types de socket dépend
       de l’hyperviseur sous-jacent.

       Un nouveau socket est créé avec

           socket(AF_VSOCK, socket_type, 0);

       Quand un processus veut établir une connexion, il appelle connect(2) avec l’indication  de
       l’adresse du socket de destination. Le socket est automatiquement lié à un port libre s’il
       n’est pas lié.

       Un processus peut écouter les connexions entrantes en se reliant d’abord à une adresse  de
       socket avec bind(2) puis en appelant listen(2).

       Les données sont transmises en utilisant les familles d’appels système send(2) ou write(2)
       et les données sont reçues en utilisant les familles d’appels système recv(2) ou read(2).

   Formats d'adresse
       Une adresse de socket est définie sous forme de combinaison d’un CID (Context  Identifier)
       de  32 bits  et un numéro de port de 32 bits. Le CID identifie la source ou la destination
       qui sont soit une machine virtuelle, soit l’hôte. Le numéro de port différencie les divers
       services en cours d’exécution sur une seule machine.

           struct sockaddr_vm {
               sa_family_t    svm_family;    /* Famille d’adresses : AF_VSOCK */
               unsigned short svm_reserved1;
               unsigned int   svm_port;      /* N° port dans l’ordre d’octets de l’hôte */
               unsigned int   svm_cid;       /* Adresse dans l’ordre d’octets de l’hôte */
               unsigned char  svm_zero[sizeof(struct sockaddr) -
                                       sizeof(sa_family_t) -
                                       sizeof(unsigned short) -
                                       sizeof(unsigned int) -
                                       sizeof(unsigned int)];
           };

       svm_family  est  toujours  défini  à  AF_VSOCK.  svm_reserved1 est toujours défini à zéro.
       svm_port contient le numéro de port dans l’ordre d’octets de l’hôte. Les numéros  de  port
       en dessous de 1024 sont appelés ports privilégiés. Seulement un processus avec la capacité
       CAP_NET_BIND_SERVICE peut bind(2) à ces numéros de port.  svm_zero  doit  être  rempli  de
       zéros.

       Il  existe  plusieurs  adresses spéciales : VMADDR_CID_ANY (-1U) signifie n’importe quelle
       adresse pour la liaison, VMADDR_CID_HYPERVISOR (0) est réservée aux services  internes  de
       l’hyperviseur,  VMADDR_CID_LOCAL  (1)  est  l’adresse  bien connue pour les communications
       locales (loopback), VMADDR_CID_HOST (2) est l’adresse bien connue de l’hôte.

       La constante spéciale VMADDR_PORT_ANY (-1U) signifie n’importe quel port pour la liaison.

   Migration à chaud
       Des sockets sont affectés pour la migration à chaud de machines  virtuelles.  Les  sockets
       SOCK_STREAM connectés deviennent déconnectés quand les machines virtuelles migrent vers un
       nouvel hôte. Les applications doivent se reconnecter quand cela se produit.

       Le CID local peut varier à travers une  migration  à  chaud  si  l’ancien  CID  n’est  pas
       disponible  sur  le  nouvel hôte. Les scripts liés sont automatiquement mis à jour vers le
       nouveau CID.

   Ioctls
       Les ioctls suivants sont disponibles sur le périphérique /dev/vsock.

       IOCTL_VM_SOCKETS_GET_LOCAL_CID
              Obtention du CID  de  la  machine  locale.  L’argument  est  un  pointeur  vers  un
              unsigned int.

                  ioctl(fd, IOCTL_VM_SOCKETS_GET_LOCAL_CID, &cid);

              Envisager  d’utiliser  VMADDR_CID_ANY  lors  de la liaison au lieu d’obtenir le CID
              local avec IOCTL_VM_SOCKETS_GET_LOCAL_CID.

   Communication locale
       VMADDR_CID_LOCAL (1) dirige les paquets vers le même hôte qui  les  a  générés.  Cela  est
       utile pour tester les applications sur un seul hôte et pour le débogage.

       Le  CID  local  obtenu  avec IOCTL_VM_SOCKETS_GET_LOCAL_CID peut être utilisé pour le même
       but, mais l’utilisation de VMADDR_CID_LOCAL est préférable.

ERREURS

       EACCES Impossibilité de lier à un port privilégié sans la capacité CAP_NET_BIND_SERVICE.

       EADDRINUSE
              Impossibilité de lier à un port déjà utilisé.

       EADDRNOTAVAIL
              Impossibilité de trouver un port libre pour la liaison ou impossibilité de  lier  à
              un CID non local.

       EINVAL Paramètres  non  autorisés.  Cela comprend l’essai de lier à un socket déjà lié, la
              fourniture  d’une  structure  sockaddr_vm  non  valable  et  d’autres  erreurs   de
              validation d’entrée.

       ENOPROTOOPT
              Option non valable de socket dans setsockopt(2) ou getsockopt(2).

       ENOTCONN
              Impossibilité de réaliser une opération sur un socket non connecté.

       EOPNOTSUPP
              Opération  non  prise  en charge. Cela comprend l’indicateur MSG_OOB non implémenté
              pour la famille send(2) d’appels  système  et  MSG_PEEK  pour  la  famille  recv(2)
              d’appels système.

       EPROTONOSUPPORT
              Numéro  de  protocole  de  socket  non autorisé. Le protocole devrait toujours être
              zéro.

       ESOCKTNOSUPPORT
              Type de socket  non  pris  en  charge  dans  socket(2).  Seulement  SOCK_STREAM  et
              SOCK_DGRAM sont autorisés.

VERSIONS

       La  prise  en  charge pour VMware (VMCI) est disponible depuis Linux 3.9. KVM (virtio) est
       pris en charge depuis Linux 4.8. Hyper-V l’est depuis Linux 4.14.

       VMADDR_CID_LOCAL est pris en charge depuis Linux 5.6.  La  communication  locale  dans  le
       client  et  dans  l’hôte est prise en charge depuis Linux 5.6. Les versions précédentes ne
       géraient la communication locale que dans le client (mais pas dans  l’hôte)  et  seulement
       avec certains transports (VMCI et virtio).

VOIR AUSSI

       bind(2), connect(2), listen(2), recv(2), send(2), socket(2), capabilities(7)

TRADUCTION

       La  traduction  française  de  cette  page  de  manuel  a  été créée par Christophe Blaess
       <https://www.blaess.fr/christophe/>, Stéphan  Rafin  <stephan.rafin@laposte.net>,  Thierry
       Vignaud  <tvignaud@mandriva.com>,  François Micaux, Alain Portal <aportal@univ-montp2.fr>,
       Jean-Philippe   Guérard   <fevrier@tigreraye.org>,   Jean-Luc   Coulon   (f5ibh)    <jean-
       luc.coulon@wanadoo.fr>,    Julien    Cristau    <jcristau@debian.org>,    Thomas   Huriaux
       <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin
       Duneau  <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis
       Barbier  <barbier@debian.org>,  David  Prévot   <david@tilapin.org>,   Cédric   Boutillier
       <cedric.boutillier@gmail.com>,   Frédéric   Hantrais  <fhantrais@gmail.com>  et  Jean-Paul
       Guillonneau <guillonneau.jeanpaul@free.fr>

       Cette traduction est une documentation libre ; veuillez vous reporter  à  la  GNU  General
       Public   License   version 3  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  concernant  les
       conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un
       message à ⟨debian-l10n-french@lists.debian.org⟩.