Merci
Du coup c'est clair (enfin, je crois, dis moi si je me trompe)
Les modifs importantes sont dans networking/udhcp/packet.c, c'est à dire le positionnement du SO_PRIORITY pour la CoS (récupérée du paramètre -y)
Mais cette modif n'est faite que pour la fonction udhcp_send_raw_packet(), et pas pour udhcp_send_kernel_packet()
Or si on regarde dans dhcpc.c, on trouve cette fonction clef, à double usage :
static int bcast_or_ucast(struct dhcp_packet *packet, uint32_t ciaddr, uint32_t server)
{
if (server)
return udhcp_send_kernel_packet(packet,
ciaddr, CLIENT_PORT,
server, SERVER_PORT,
client_data.interface);
return raw_bcast_from_client_data_ifindex(packet, ciaddr); => modifié =
}
Le paramètre "server" est à zéro lorsqu'on broadcaste, or le renew automatique fait un unicast, ce qui utilise la fonction udhcp_send_kernel_packet, qui ne passe pas de CoS, contrairement à sa petite camarade raw qui modifie SO_PRIORITY avec le patch.
1er renew (mode auto mi-vie, et aussi USR1), en unicast:
send_renew(server_id, requested_ip) => bcast_or_ucast(&packet, ciaddr, server); => udhcp_send_kernel_packet => pas modifié pour CoS
La suite, seulement pour USR1 car lease_remaining à zéro, en broadcast :
send_renew(0 /*INADDR_ANY*/, requested_ip); => raw_bcast_from_client_data_ifindex(packet, ciaddr); => udhcp_send_raw_packet => modifié pour CoS