getmoon
驱动牛犊
驱动牛犊
  • 注册日期2001-10-14
  • 最后登录2004-06-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2051回复:1

神那,救救我吧。

楼主#
更多 发布于:2001-10-18 12:22
我按照设备驱动书上写了一个虚拟网卡驱动,不过改动了一下,我的目的是这样的,
1,把接受到的包都发送到虚拟网卡,这样从上面来看就好像是从虚拟网卡接收到的包一?
样,这个问题已经解决了。
2。想虚拟网卡发送包的时候,虚拟网卡的接收函数把包通过物理网卡发送。发送函数写
了,能够编译过去,也能够insmod ,也可以配置虚拟网卡的IP,
问题来了:配置了一条发出包的时候要通过虚拟网卡发送的路由。用ping 来ping 目的
网络的一台主机。用ifconfig sn0和ifconfig eth0也却是发现已经发送的包增多。
结果一段时间后就down机。
提示如下:(sn0是虚拟网卡名字)
kernel panic :skput:over:c8023d21:1632 put:1514 dev sn0
in swapper task ---not syncing.
那位高手解决一下问题吧:发送程序程序如下:别的肯定没有问题。
int snull_tx(struct sk_buff *skb, struct device *dev)/*the dev is a virtual
netcard*/
{
int len, retval=0;
struct snull_priv *privp;
if (dev->tbusy) {/* shouldn't happen */
retval = -EBUSY;
goto tx_done;
}
if (skb == NULL) {
return 0;
}
dev->tbusy = 1; /* transmission is busy */
dev->trans_start = jiffies; /* save the timestamp */
/* actual deliver of data is device-specific, the hard_dev is eth0 */
skb->dev = hard_dev; /*hard_dev = dev_get("eth0")*/
dev_queue_xmit(skb);
privp = dev->priv;
privp = (struct snull_priv *)dev->priv;
privp->stats.tx_packets++;
dev->tbusy = 0;
mark_bh(NET_BH);
tx_done:
dev_kfree_skb(skb); /* release it */
return retval; /* zero == done; nonzero == fail */
}
预览明月 [url]getmoon.home.chinaren.com[/url]
getmoon
驱动牛犊
驱动牛犊
  • 注册日期2001-10-14
  • 最后登录2004-06-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-10-22 09:04
参照ipip.c的写法,能够发送出去了。
预览明月 [url]getmoon.home.chinaren.com[/url]
游客

返回顶部