1
OpenWrt / Quelles sont les options supportées par le démon DHCP(v4) OpenWrt ?
« Dernier message par basilix le Aujourd'hui à 15:10:50 »On affecte un pointeur sur la fonction handle_dhcpv4 dans notre structure de type odhcpd_event. Le champ handle_dgram (odhcpd.h) est un pointeur sur une fonction ; il contient l'adresse de handle_dhcpv4.
iface est un pointeur sur une structure de type interface (odhpcd.h). Cette structure définit aussi des « paramètres » relatifs à IPv6 (RA, NDP, DHCPv6).
Je suppose que handle_dgram est l'abréviation de « handle datagram ». Ci-dessous le prototype de la fonction handle_dhcpv4.
D'ailleurs, je ne comprends pas quand la fonction est invoquée. Le pointeur iface semble être transmis d'appel en appel de fonctions.
dhcpv4_setup_interface ⬅ dhcpv4_netevent_cb. La fonction dhcpv4_netevent_cb est accessible via le champ dhcpv4_netevent_handler.cb.
La fonction netlink_add_netevent_handler prend comme argument l'adresse de la structure dhcpv4_netevent_handler. Cette fonction est elle-même invoquée par la fonction dhcpv4_init.
Code: [Sélectionner]
iface->dhcpv4_event.handle_dgram = handle_dhcpv4;
iface est un pointeur sur une structure de type interface (odhpcd.h). Cette structure définit aussi des « paramètres » relatifs à IPv6 (RA, NDP, DHCPv6).
Je suppose que handle_dgram est l'abréviation de « handle datagram ». Ci-dessous le prototype de la fonction handle_dhcpv4.
Code: [Sélectionner]
static void handle_dhcpv4(void *addr, void *data, size_t len,
struct interface *iface, void *dest_addr);
D'ailleurs, je ne comprends pas quand la fonction est invoquée. Le pointeur iface semble être transmis d'appel en appel de fonctions.
dhcpv4_setup_interface ⬅ dhcpv4_netevent_cb. La fonction dhcpv4_netevent_cb est accessible via le champ dhcpv4_netevent_handler.cb.
La fonction netlink_add_netevent_handler prend comme argument l'adresse de la structure dhcpv4_netevent_handler. Cette fonction est elle-même invoquée par la fonction dhcpv4_init.
Code: [Sélectionner]
int netlink_add_netevent_handler(struct netevent_handler *handler)
{
if (!handler->cb)
return -1;
list_add(&handler->head, &netevent_handler_list);
return 0;
}