linux串口上网的简单实现,Linux系统串口上网的简单实现(下) (1)

编写伪网络设备驱动程序

伪网络驱动程序和字符设备驱动程序一样,也必须初始化和注册。网络驱动需记录其发送和接收数据量的统计信息,所以我们定义一个记录这些信息的数据结构。

struct ednet_priv {

#ifdef LINUX_24

struct net_device_stats stats;

#else

struct enet_statistics stats;

#endif

struct sk_buff *skb;

spinlock_t lock;

};

struct ednet_priv只有3个数据成员。Linux2.4.x 使用的网络数据状态统计结构是struct net_device_stats,而Linux 2.2.x则使用的是struct enet_statistics。同样,对控制网络接口设备的设备结构也有不同的定义:Linux2.4.x使用的是struct net_device,而Linux2.2.x却是struct device。

#ifdef LINUX_24

struct net_device ednet_dev;

#else

struct device ednet_dev;

#endif

伪网络驱动程序的也需要初始化和注册。和字符设备的注册不同之处是,它使用的是register_netdev(net_device *) kernel API。

int ednet_module_init(void)

{

int err;

strcpy(ednet_dev.name, "ed0");

ednet_dev.init = ednet_init;

if ( (err = register_netdev(&ednet_dev)) )

printk("ednet: error %i registering pseudo network device \"%s\"\n",

err, ednet_dev.name);

return err;

}

ednet_dev的name域是接口名,ednet_module_init()中赋予网络接口的名字为ed0,如果本网络设备被加载,使用ifconfig命令可以看到ed0。

[root@localhost pku]# /sbin/ifconfig

ed0 Link encap:Ethernet HWaddr 00:45:44:30:30:30

inet addr:192.168.3.9 Bcast:192.168.3.255 Mask:255.255.255.0

UP BROADCAST RUNNING NOARP MULTICAST MTU:1500 Metric:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:100

RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值