gpt4 book ai didi

c - 从 tcp 拥塞控制 Linux 内核模块访问 TCP header

转载 作者:可可西里 更新时间:2023-11-01 02:33:02 24 4
gpt4 key购买 nike

我正在为 Linux 内核开发 TCP 拥塞控制算法,我将其实现为内核模块。在代码中,我想访问 tcp header 并使用以下函数来执行此操作。

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");
}

我认为这基本上应该可行,因为它已完成 here inside the kernel

但是,查看我的 kern.log 我看到了:

skb address: dbd94501
tcp_header address is NULL

显然是对 tcp_hdr(skb) 的调用失败。

我不知道为什么会这样。有没有人给我一个鼓舞人心的提示,我应该在哪里查看或我必须更改什么才能取回 tcp header ?

干杯,

斯特凡

最佳答案

在线

struct tcphdr *tcp_header = tcp_hdr(skb);

你仍然可以让 skb == NULL。

为什么不把整个 if 部分放在大括号中?

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");
}
}

关于c - 从 tcp 拥塞控制 Linux 内核模块访问 TCP header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4478132/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com