Netmap分析(二)

netmap_linux.c

//初始化netmap
static int linux_netmap_init(void)
{
        int err;
 /* Errors have negative values on linux. */
/* 
申请netmap的各个内存池,包括netmap_if,netmap_ring,netmap_buf以及内存池的管理结构
*/
        err = -netmap_init();  //netmap.c
        if (err) {
                return err;
        }
/*      
* 驱动注册程序
 *      
 * Returns 0 on success, negative on failure
*/ 
        err = nm_os_pt_memdev_init();
        if (err) {
                return err;
        }
//初始化virtual passthrough netmap
        err = ptnet_init();
        if (err) {
                nm_os_pt_memdev_uninit();
                return err;
        }

        return 0;
}


netmap.c 


                    
//真正的初始化函数
Int netmap_init(void)
{       
        int error;

        NMG_LOCK_INIT();
//初始化锁和引用计数
        error = netmap_mem_init();
        if (error != 0)
                goto fail;
        /*
         * MAKEDEV_ETERNAL_KLD avoids an expensive check on syscalls
         * when the module is compiled in.
         * XXX could use make_dev_credv() to get error number
         */
/*
Make_dev_credf函数将设置错误,并返回第一个参数。
这依赖于'error'局部变量的可用性。
对于老Linux系统不具备的devfs,生成
在系统日志消息,以便系统管理员知道为了创建/ dev/netmap要运行的命令
*/
/*
netmapcdevsw为对应的设备结构体定义,netmapfops为对应的操作函数。
*/
        netmap_dev = make_dev_credf(MAKEDEV_ETERNAL_KLD,
                &netmap_cdevsw, 0, NULL, UID_ROOT, GID_WHEEL, 0600,
                              "netmap");
        if (!netmap_dev)
                goto fail;

//初始化netmap_bridge并分配内存
        error = netmap_init_bridges();
        if (error)
                goto fail;

#ifdef __FreeBSD__
        nm_os_vi_init_index();
#endif  
        
        error = nm_os_ifnet_init();
        if (error)
                goto fail;

        printf("netmap: loaded module\n");
        return (0);
fail:   
        netmap_fini();
        return (EINVAL); /* may be incorrect */
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高晓伟_Steven

相逢即是有缘,动力源于金钱。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值