Auteur Sujet: [DHCPv6] Est-il courant d'ouvrir une connexion TCP ?  (Lu 228 fois)

0 Membres et 1 Invité sur ce sujet

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 679
[DHCPv6] Est-il courant d'ouvrir une connexion TCP ?
« le: 05 avril 2025 à 17:54:12 »
Le serveur DHCPv6 par défaut semble capable de transférer des données par TCP.


./dhcpv6-ia.c:118:   return (a->managed_size || a->length > prefix_length);
./dhcpv6-ia.c:206:   if (a->managed_sock.fd.registered) {
./dhcpv6-ia.c:207:      ustream_free(&a->managed_sock.stream);
./dhcpv6-ia.c:208:      close(a->managed_sock.fd.fd);
./dhcpv6-ia.c:217:   free(a->managed);
./dhcpv6-ia.c:223:   struct odhcpd_ipaddr *addrs = (c->managed) ? c->managed : iface->addr6;
./dhcpv6-ia.c:224:   size_t addrlen = (c->managed) ? (size_t)c->managed_size : iface->addr6_len;
./dhcpv6-ia.c:230:      int prefix = c->managed ? addrs.prefix : c->length;
./dhcpv6-ia.c:388:            if (!(ctxt.c->flags & OAF_BOUND) || ctxt.c->managed_size < 0)
./dhcpv6-ia.c:488:               if (!(ctxt.c->flags & OAF_BOUND) || ctxt.c->managed_size < 0)
./dhcpv6-ia.c:606:      netlink_setup_route(&prefix, (a->managed_size) ? addrs.prefix : a->length,
./dhcpv6-ia.c:614:   struct odhcpd_ipaddr *addrs = (a->managed) ? a->managed : iface->addr6;
./dhcpv6-ia.c:615:   ssize_t addrlen = (a->managed) ? a->managed_size : (ssize_t)iface->addr6_len;
./dhcpv6-ia.c:645:static void managed_handle_pd_data(struct ustream *s, _unused int bytes_new)
./dhcpv6-ia.c:648:   struct dhcp_assignment *c = container_of(fd, struct dhcp_assignment, managed_sock);
./dhcpv6-ia.c:650:   bool first = c->managed_size < 0;
./dhcpv6-ia.c:663:      c->managed_size = 0;
./dhcpv6-ia.c:672:         n = realloc(c->managed, (c->managed_size + 1) * sizeof(*c->managed));
./dhcpv6-ia.c:675:         c->managed = n;
./dhcpv6-ia.c:676:         n = &c->managed[c->managed_size];
./dhcpv6-ia.c:705:         ++c->managed_size;
./dhcpv6-ia.c:711:   if (first && c->managed_size == 0)
./dhcpv6-ia.c:719:static void managed_handle_pd_done(struct ustream *s)
./dhcpv6-ia.c:722:   struct dhcp_assignment *c = container_of(fd, struct dhcp_assignment, managed_sock);
./dhcpv6-ia.c:726:   c->managed_size = 0;
./dhcpv6-ia.c:744:         assign->managed_sock.stream.notify_read = managed_handle_pd_data;
./dhcpv6-ia.c:745:         assign->managed_sock.stream.notify_state = managed_handle_pd_done;
./dhcpv6-ia.c:746:         ustream_fd_init(&assign->managed_sock, fd);
./dhcpv6-ia.c:747:         ustream_printf(&assign->managed_sock.stream, "%s,%x\n::/%d,0,0\n\n",
./dhcpv6-ia.c:749:         ustream_write_pending(&assign->managed_sock.stream);
./dhcpv6-ia.c:750:         assign->managed_size = -1;
./dhcpv6-ia.c:762:         managed_handle_pd_data(&assign->managed_sock.stream, 0);
./dhcpv6-ia.c:764:         if (fcntl(fd, F_GETFL) >= 0 && assign->managed_size > 0)
./dhcpv6-ia.c:924:          c->managed_size)
./dhcpv6-ia.c:1054:      struct odhcpd_ipaddr *addrs = (a->managed) ? a->managed : iface->addr6;
./dhcpv6-ia.c:1055:      size_t addrlen = (a->managed) ? (size_t)a->managed_size : iface->addr6_len;
./dhcpv6-ia.c:1097:               .prefix = (a->managed_size) ? addrs.prefix : a->length,
./dhcpv6-ia.c:1178:            struct odhcpd_ipaddr *addrs = (a->managed) ? a->managed : iface->addr6;
./dhcpv6-ia.c:1179:            size_t addrlen = (a->managed) ? (size_t)a->managed_size : iface->addr6_len;
./dhcpv6-ia.c:1199:                        ia_p->prefix == ((a->managed) ? addrs.prefix : a->length))
./dhcpv6-ia.c:1333:   struct odhcpd_ipaddr *addrs = (a && a->managed) ? a->managed : iface->addr6;
./dhcpv6-ia.c:1334:   size_t addrlen = (a && a->managed) ? (size_t)a->managed_size : iface->addr6_len;
./dhcpv6-ia.c:1511:      if (a && a->managed_size < 0)
./dhcpv6-ia.c:1548:                            !a->managed_size && ++a->length <= 64);
./dhcpv6-ia.c:1565:                  if (a->managed_size && !assigned)
./dhcpv6-ia.c:1639:         } else if (!assigned && a && a->managed_size == 0) {
./config.c:221:   { .name = "managed-config", .flag = ND_RA_FLAG_MANAGED },
./odhcpd.h:230:   struct odhcpd_ipaddr *managed;
./odhcpd.h:231:   ssize_t managed_size;
./odhcpd.h:232:   struct ustream_fd managed_sock;


C'est apparemment pour que le serveur reçoive des informations sur les préfixes et addresses. On trouve une mention obscure aux adresses transports dans le RFC 8415.
Cela fait référence à des extensions DHCPv6. Pas le temps de lire tous les RFC.

Si quelqu'un pouvait éclairer ma petite lanterne... ?

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 679
[DHCPv6] Est-il courant d'ouvrir une connexion TCP ?
« Réponse #1 le: 05 avril 2025 à 18:39:09 »
La réalité est plutôt décevante.   :)

   S-3:  The relay SHOULD implement DHCPv6 Active Leasequery as defined
         in [RFC7653] to keep the local lease database in sync with the
         DHCPv6 server.


La fonctionnalité referencedby du site de l'IETF « References to RFC ... » m'a simplifié la tâche.