Hello,
Une problématique courante dans cette section du forum est de patcher des softs (typiquement des clients DHCP) pour qu'ils « préparent le terrain » à la mise en place de la CoS (c-à-d les trois bits "PCP" dans l'en-tête
802.1Q). Sur les machines et routeurs basés sur Linux, cela passe typiquement par l'ajustement de la
skb->priority via
setsockopt(SOL_SOCKET, SO_PRIORITY).
En résumé :
programme (ex : dhclient) kernel interface vlan paquet réseau
setsockopt(SOL_SOCKET, SO_PRIORITY, 6, 4); -> skb->priority -> egress-qos-map -> 802.1Q/PCP -> Orange content
Une rapide recherche m'a confirmé que setsockopt() était fréquemment discuté ou du moins mentionné mais
LD_PRELOAD est beaucoup moins souvent évoqué, alors que ça permet potentiellement de s'épargner une recompilation (ou de ne pas embêter zoc).
Aujourd'hui, j'ai pris le temps d'écrire un petit objet LD_PRELOAD qui émet un setsockopt() après chaque appel à
socket (ce qui est un peu bourrin en théorie mais a priori inoffensif dans la pratique) :
so_priority.soJe vous copie-colle bêtement le README :
Set SO_PRIORITY (aka skb->priority on Linux) right after each socket() call.
Compile with: gcc -shared -ldl -fPIC so_priority.c -o so_priority.so
Usage: SO_PRIORITY_DEBUG=1 SO_PRIORITY_VALUE=6 LD_PRELOAD=/path/to/so_priority.so program arg1 arg2
Petite limitation : pour ceux qui voudraient l'utiliser avec l'utilitaire ping, cela ne fonctionne que si vous êtes root (parce que la prise en compte de LD_PRELOAD est désactivée pour les binaires setuid ou associés à une capability, ce qui est le cas de ping).
That's it.