À propos du projet

dhcp-golib est une bibliothèque cliente DHCP conçue pour être intégrée dans un programme Go. Elle prend un bail sur une interface réseau, le maintient renouvelé et émet des événements lorsque le bail change. Elle ne modifie délibérément rien au lien : l'ajout de l'adresse, des routes ou du résolveur est laissé à l'appelant. Cette séparation permet à un seul processus de détenir des baux sur plusieurs interfaces à la fois. Elle implémente à la fois DHCPv4 et DHCPv6, cible Linux et ne dépend que de la bibliothèque standard Go. Le protocole s'exécute à l'intérieur du processus ; il n'exécute pas de commande externe comme dhcpcd ou dhclient et ne nécessite pas de droits d'administrateur. Les fonctionnalités décrites dans le README comprennent : - Cycle de vie du bail : acquérir, renouveler à T1, rebinder à T2, expirer lorsqu'aucun serveur ne répond, et libérer (y compris la gestion d'un refus de serveur tel que DHCPNAK ou un code d'état DHCPv6). - Vérifications de conflit d'adresse avant d'annoncer une adresse, avec déclin et récupération, suivant la RFC 5227 sur IPv4 et la RFC 4862 sur IPv6. - Persistance au redémarrage : un journal de bail durable permet à un processus redémarré de demander l'adresse qu'il détenait précédemment (INIT-REBOOT / Confirm), et une queue de journal déchirée est réparée avant que de nouveaux enregistrements ne soient ajoutés. - Rapport de l'adresse, de la passerelle, des routes statiques, du MTU de lien, des serveurs DNS et de la liste de recherche, avec des délais absolus résolus à partir des options. - Un noyau de protocole pur et reproductible : pas d'horloge et pas d'E/S à l'intérieur de la machine à états, de sorte qu'un échange capturé peut être rejoué hors ligne et de manière déterministe. - Les types d'événements sont Acquis, Modifié, Renouvelé, Perdu, Échoué et Configuré, maintenus séparés pour qu'un appelant qui doit reconfigurer une interface sache ce qui s'est passé. DHCPv6 est un type de client séparé qui ne partage pas de socket, de journal ou d'énumération d'état avec le client IPv4, de sorte qu'un point de terminaison double pile peut exécuter les deux. Le README indique que IPv6 n'est pas terminé : il prend et maintient un bail, lit les drapeaux de l'avis de routeur, et prend en charge la reconfiguration initiée par le serveur signée avec la clé que le serveur a donnée au client. La formation d'adresse à partir d'un préfixe (SLAAC), la délégation de préfixe (IA_PD), le Rapid Commit et les adresses temporaires (IA_TA) sont prévus pour la version 1.0.0 ou ultérieure. Sont explicitement hors portée : appliquer des adresses, des routes ou des résolveurs au lien ; gestion des adresses ; agir en tant qu'agent de relais ; DHCPFORCERENEW sur IPv4 ; l'option de nom de client FQDN DHCPv6 ; DHCPINFORM sur IPv4 ; réutiliser un bail après un redémarrage sans réponse ; et les plates-formes non Linux. Le renouvellement de l'unicast IPv4 nécessite l'adresse matérielle du pair et ne revient pas en diffusion. La bibliothèque est pré-1.0 avec une API instable qui peut changer entre les versions taguées. Elle est écrite pour et consommée par le plugin réseau docker-net-dhcp ; la bibliothèque est sous licence MIT tandis que le plugin est sous licence GPL-3.0. Les tests sont pilotés par un seul arbitre verify.sh qui n'a pas besoin de droits d'administrateur, et la suite de tests s'exécute contre un serveur dnsmasq réel sur une paire de veth dans un espace de noms non privilégié, vérifié par rapport au propre journal et au fichier de bail du serveur.