Netmap分析(四)

Netmap分析(四)
netmap.c NIOCGINFO 用于返回netmap的基本信息 case NIOCGINFO: /* return capabilities etc */ if (nmr->nr_cmd == NETMAP_BDG_LIST) { error = netmap_bdg_ctl(nmr, NULL); break; } NMG_LOCK(); do { /* memsize is always valid */ struct netmap_mem_d *nmd = &nm_mem; u_int memflags; if (nmr->nr_name[0] != '\0') { /* get a refco...

Netmap分析(三)

Netmap分析(三)
Netmap_linux.c 两个重要的结构 struct miscdevice netmap_cdevsw = { /* same name as FreeBSD */ MISC_DYNAMIC_MINOR, "netmap", &netmap_fops, }; static struct file_operations netmap_fops = { .owner = THIS_MODULE, .open = linux_netmap_open, //malloc the private_data from memory .mmap = linux_netmap_mmap, //设置netmap内存映射...

Netmap分析(二)

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_memde...

Netmap分析(一)

Netmap分析(一)
工作原理 Netmap是基于零拷贝思想的高速网络I/O架构,它能够在千兆或万兆网卡上达到网卡的线速收发包速率。并且能够有效地节省cpu等计算机资源。 零拷贝(zero-copy)是指主机、路由器等设备与网卡交互时,CPU不需要将数据从和个内存区域拷贝到另一个内存区域。零拷贝通过减少数据拷贝或共享总线操作次数,消除通信数据的不必要的拷贝过程,能够有效地提高通信效率、节省存储空间和处理时间。因此,零拷贝技...

比特币源码研读(二)之搭环境遇到的那些坑

比特币源码研读(二)之搭环境遇到的那些坑
首先说一下度《精通比特币》是一直不理解的一个地方: 上面两处被圈起来的地方都提到了一个数字2256,特别是第一句话更是让人费解,如果私钥只能在1到2256间产生那岂不是太容易重复了。关于这点,我认为是在翻译或者排版是出现了错误,2256应该是想表达2的256次方的意思。后续翻看其它资料是也证实了我的想法。 现在说说搭环境遇到的问题. 一、源的问题 我是在docker下进行的源码安装,使用官方...

比特币源码研读(一)之密钥和地址到底是个啥关系

比特币源码研读(一)之密钥和地址到底是个啥关系
最近有幸加入了比特币源码研读班,很开心能和那些对比特币了解或者感兴趣的朋友一起交流学习。 这是我入班的第一篇文章,并且以后每周都要有至少一篇文章更新,理论上总要写一些鼓励自己的话。豪言壮语就不说了,只想引用一句颇有这里的话。“一生坚持做一件事,一定能够创造奇迹。因为坚持一生本身就是奇迹。” 好了,煽情完毕。现在我们来聊聊密钥和地址到底是个啥。 先说密钥。在《精通比特币》一书中曾...

suricata 3.1 源码分析26 (数据包VLAN解码)

suricata 3.1 源码分析26 (数据包VLAN解码)
由于VLAN可能嵌套,因此Packet结构体中使用以下相应字段进行记录: 字段含义vlan_idx当前的vlan层数,初始为0,最多为2,即最多只能嵌套一层VLAN,否则会报错。vlan_id[2]记录每一层的VLAN ID(共12位,可表示4096个VLAN),通过GET_VLAN_ID获得。vlanh[2]记录每一层的VLAN头指针(VLANHdr *类型)。 /** * \internal * \brief this function is used to decode IEEE802.1q packets * * \param tv...

suricata 3.1 源码分析24 (数据包解码模块执行)

suricata 3.1 源码分析24 (数据包解码模块执行)
/** * \brief This function passes off to link type decoders. * * DecodePcap reads packets from the PacketQueue and passes * them off to the proper link type decoder. * * \param t pointer to ThreadVars * \param p pointer to the current packet * \param data pointer that gets cast into PcapThreadVars for ptv * \param pq pointer to the current PacketQueue */...

suricata 3.1 源码分析11

suricata 3.1 源码分析11
/* Wait till all the threads have been initialized */ if (TmThreadWaitOnThreadInit() == TM_ECODE_FAILED) { SCLogError(SC_ERR_INITIALIZATION, "Engine initialization failed, " "aborting..."); exit(EXIT_FAILURE); } 等待子线程初始化完成。检查是否初始化完成的方式是遍历tv_root,调用TmThreadsCheckFlag检查子线程的状...
Copyright © 九毛的官方博客 保留所有权利.   Theme  Ality

用户登录