Linux dev_queue_xmit导致内核死机
我正在编写内核模块的一部分,它将skbuff从一个接口传输到另一个接口。Ex所有来自eth0的数据包,在eth1上转发到。即使是我打算传输的第一个数据包也会导致dev_queue_xmit()中的内核崩溃。有人能帮我理解这里出了什么问题吗?。内核恐慌发生在 net/core/skbuff.c的内核错误:927 我用来传输数据包的代码示例函数如下。请让我知道Linux dev_queue_xmit导致内核死机,linux,module,kernel,Linux,Module,Kernel,我正在编写内核模块的一部分,它将skbuff从一个接口传输到另一个接口。Ex所有来自eth0的数据包,在eth1上转发到。即使是我打算传输的第一个数据包也会导致dev_queue_xmit()中的内核崩溃。有人能帮我理解这里出了什么问题吗?。内核恐慌发生在 net/core/skbuff.c的内核错误:927 我用来传输数据包的代码示例函数如下。请让我知道 enter code here int txPktOnOtherIf(struct sk_buff *skb, struct net
enter code here
int txPktOnOtherIf(struct sk_buff *skb, struct net_device *tdev)
{
int reservedSpace=max((int)LL_RESERVED_SPACE(tdev),(int)sizeof(struct ethhdr));
int buffLen = reservedSpace - sizeof(struct ethhdr) + skb->len + skb->dev->needed_tailroom;
struct sk_buff* nskb = NULL;
int err = 0;
printk("ReservedSpace is %d and buffer len is %d",reservedSpace,buffLen);
nskb = alloc_skb(buffLen, GFP_KERNEL);
if (!nskb) {
printk("Couldn't allocate SKB\n");
return -1;
}
skb_reserve(nskb, reservedSpace);
skb_reset_network_header(nskb);
skb_put(nskb, skb->len - sizeof(struct ethhdr));
skb_push(nskb, sizeof(struct ethhdr));
skb_reset_mac_header(nskb);
skb_reset_mac_len(nskb);
err = skb_store_bits(nskb, 0, skb->data, skb->len);
if (err) {
kfree_skb(nskb);
printk("Error %d storing to SKB\n", err);
return -1;
}
nskb->dev = tdev;
nskb->protocol = skb->protocol;
skb_get(nskb);
err = dev_queue_xmit(nskb);
err = net_xmit_eval(err);
if (err) {
kfree_skb(nskb);
printk("Error %d sending frame\n", err);
return -1;
}
return 0;
}
您使用的是哪个发行版和哪个内核?在哪个建筑上?另外,您可以发布内核的整个调用堆栈吗?