En fait il y une copie complète des sources du noyau. Il faut que je trouve un moyen de trouver les différences avec le noyau officiel.
Edit:
Bon, le firmware de la livebox est basé sur le noyau 2.6.28.8. Du coup j'ai récupéré le code source d'origine sur kernel.org et j'ai fait un diff. Problème, chez Orange ils utilisent évidemment un système de gestion de révisions et ils ont committé l'ensemble du code source. Du coup il y a beaucoup de différences entre le code source d'origine et le code "orange" dues aux numéros de versions dans les headers des fichiers... Ca va être chaud d'analyser... Ceci dit j'ai déjà vu des différences dans le module 802.1q...
xt_CLASSIFY.c :
static unsigned int
classify_tg(struct sk_buff *skb, const struct xt_target_param *par)
{
const struct xt_classify_target_info *clinfo = par->targinfo;
if (clinfo->priority == 0xff) {
u_int8_t dscp = 0;
if (par->family == NFPROTO_IPV4) {
if(ip_hdr(skb)) {
dscp = ipv4_get_dsfield(ip_hdr(skb)) >> XT_DSCP_SHIFT;
}
}
else {
if(ipv6_hdr(skb)) {
dscp = ipv6_get_dsfield(ipv6_hdr(skb)) >> XT_DSCP_SHIFT;
}
}
skb->priority = (dscp >> 3) & 7;
}
else {
skb->priority = clinfo->priority;
}
return XT_CONTINUE;
}
comparé à la version du kernel d'origine:
static unsigned int
classify_tg(struct sk_buff *skb, const struct xt_target_param *par)
{
const struct xt_classify_target_info *clinfo = par->targinfo;
skb->priority = clinfo->priority;
return XT_CONTINUE;
}
Il y a surement d'autres modifications, et franchement tout interpréter ça dépasse largement mes compétences (et dire qu'à une époque j'avais osé postuler chez Texas Instruments pour bosser sur la plateforme OMAP4... Un peu prétentieux j'étais
).
Pour l'instant on peut juste dire qu'ils utilisent iptables et CLASSIFY, mais une version perso...
Je vais en rester là pour l'instant, c'est le WE et si je continue c'est le divorce assuré...
Allez une petite dernière :
/*
* Send an arp packet.
*/
void arp_xmit(struct sk_buff *skb)
{
skb->apFlowData.controlFlags |= IPQOS_HOQ_PACKET;
skb->priority = CONFIG_SAH_ARP_PRIORITY;
/* Send it off, maybe filter it using firewalling first. */
NF_HOOK(NFPROTO_ARP, NF_ARP_OUT, skb, NULL, skb->dev, dev_queue_xmit);
}
Les 2 premières lignes qui configurent le skb ne sont pas dans le kernel d'origine.