- 论坛徽章:
- 0
|
本帖最后由 zhayun604863141 于 2012-08-21 11:44 编辑
1.直接修改pskb->dev设备,再用dev_queue_xmit发出去的包都是有问题的包。2.
2.最后使用kfree_skb释放skb,会是系统崩溃。
下面的代码期望效果是:将所有设备名不等于lo及br0的数据包copy一份,从eth0发出去,但出现上面描述的问题,求解!- {
- char DETH[16]="eth0";
- struct sk_buff *tmpskb;
- struct net_device * ddev = dev_get_by_name(&init_net, DETH);
-
- if(!strcmp("lo",pskb->dev->name) || !strcmp("br0",pskb->dev->name))
- return NF_ACCEPT;
- else
- printk("pskb->dev = %s in->dev=%s out->dev=%s\n",pskb->dev->name,in->name,out->name);
- tmpskb = skb_copy(pskb,GFP_ATOMIC);
- //设置发送设备
- tmpskb->dev = ddev;
-
- //将data指针指向ETH头部
- skb_push(tmpskb , ETH_HLEN);
-
- if (0 > dev_queue_xmit(tmpskb))
- {
- DEBUGP("dev_queue_xmit ERROR\n");
- return NF_ACCEPT;
- }
- else
- {
- //kfree_skb(tmpskb);
- dev_put(ddev);
- }
-
- return NF_ACCEPT;
- }
复制代码 |
|