Je travaille sur un algorithme de contrôle de congestion TCP pour le noyau Linux, que je réalise en tant que module noyau. Dans le code, je veux accéder à l'en-tête tcp et utiliser la fonction suivante pour le faire.
void get_hdr(struct sock *sk){
struct sk_buff *skb;
skb = skb_peek_tail(&sk->sk_receive_queue);
if (skb != NULL)
printk(KERN_INFO "skb address: %p", skb);
struct tcphdr *tcp_header = tcp_hdr(skb);
if(tcp_header != 0)
printk(KERN_INFO "tcp_header address: %p", tcp_header);
else
printk(KERN_INFO "tcp_header is NULL");
}
Je pense que cela devrait fondamentalement fonctionner, puisque c'est fait ici dans le noyau également.
Hower, en regardant mon kern.log je vois ça :
skb address: dbd94501
tcp_header address is NULL
Apparemment, l'appel à tcp_hdr(skb) échoue.
Je n'ai aucune idée de la raison de cette situation. Quelqu'un a-t-il une idée de l'endroit où je dois regarder ou de ce que je dois changer pour récupérer l'en-tête tcp ?
A la vôtre,
Stefan