struct vport抽象的是OVS中datapath层的每个端口,通过它将ovs中的各种数据结构与Port关联起来,而结构体netdev_vport 就是vport和底层真实网络设备结构net_device的入口,关键数据结构如下:

struct vport {struct rcu_head rcu; //RCU callback head for deferred destruction.u16 port_no;          //端口号是dp中ports数组的索引;struct datapath     *dp; //这个端口所属的datapath;struct kobject kobj;  // Represents /sys/class/net/<devname>/brportchar linkname[IFNAMSIZ]; u32 upcall_portid;   //在这个端口收到的包如果匹配流表失败会通过这个netlink port传至用户空间;struct hlist_node hash_node; //  vport.c中的哈希表dev_table使用;struct hlist_node dp_hash_node; //是结构体datapath->ports中的构成元素,将所有vport连接起来;const struct vport_ops *ops;   //核心,定义vport的类型(能做的操作);struct vport_percpu_stats __percpu *percpu_stats;  //指向每个CPU的统计信息;spinlock_t stats_lock;      //自旋锁,保护下面俩字段的访问;struct vport_err_stats err_stats; //错误的统计信息;struct ovs_vport_stats offset_stats;  //过时了;
};
/***
* 对网络设备的封装。
*/
struct netdev_vport {struct rcu_head rcu; // 锁机制read copy updatestruct net_device *dev;//存储特定网络设备的所有信息
};

那么如何由vport访问到具体的真实设备呢?ovs实现中把在vport的私有存储区中存储了其对应的netdev_vport,这样便可以在需要的时候直接获取,方法如下:

/**
*     vport_priv - 访问这个vport的私有数据区
* 因为在create 这个vport的时候分配的私有数据区的大小sizeof(struct netdev_vport),
* 所以就可以把vport对应的netdev_vport存在里面,便于发布。
*/
static inline void *vport_priv(const struct vport *vport)
{return (u8 *)vport + ALIGN(sizeof(struct vport), VPORT_ALIGN);
}

原文链接:https://www.webfalse.com/read/204742/1377567.html

OVS 端口抽象层次(四十)相关推荐

  1. OVS端口镜像(十四)

    OVS上实现端口镜像的基本流程如下: 创建mirror,在mirror中指定镜像数据源及镜像目的地 将创建的mirror应用到bridge中 镜像数据源可以通过下面几个选项来指定: select_al ...

  2. OVS端口镜像(十五)

    ovs中无法直接抓包分析,可以通过端口流量镜像的方式进行抓包 端口流量镜像主要分为两步: 创建mirror,指定mirror中的源端口,目的端口 绑定mirror至bridge 1.创建mirror ...

  3. OVS原理(四十二)

    一.OVS原理 1.OVS架构 ovs的架构如上图所示,主要由内核datapath和用户空间的vswitchd.ovsdb组成. 2.主要模块职责 ovs-vswitchd 主要模块,实现vswitc ...

  4. [系统安全] 四十六.Powershell恶意代码检测系列 (1)Powershell基础入门及管道和变量的用法

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  5. [系统安全] 四十五.APT系列(10)Metasploit后渗透技术信息收集、权限提权和功能模块详解

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  6. [系统安全] 四十四.APT系列(9)Metasploit技术之基础用法万字详解及防御机理

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  7. Linux性能优化实战学习笔记:第四十六讲=====实战分析

    Linux性能优化实战学习笔记:第四十六讲 一.上节回顾 不知不觉,我们已经学完了整个专栏的四大基础模块,即 CPU.内存.文件系统和磁盘 I/O.以及网络的性能分析和优化.相信你已经掌握了这些基础模 ...

  8. CCNA实验四十 模拟ADSL与Modem拨号

    CCNA实验四十 模拟ADSL与Modem拨号 环境:Windows XP .PacketTracert5.3 目的: 了解拨号上网,掌握基本配置 步骤: 创建拓扑如下 配置ISP: 配置AAA: 配 ...

  9. 左耳听风 第四十二周

    左耳听风 第四十二周 每周完成一个ARTS: 每周至少做一个 leetcode 的算法题.阅读并点评至少一篇英文技术文章.学习至少一个技术技巧.分享一篇有观点和思考的技术文章.(也就是 Algorit ...

最新文章

  1. 【Python基础】Python 流程控制专题总结
  2. 【C++程序员学 python】python 之奇葩地方
  3. 【Verilog HDL】第三章 reg和net及其一组类型的区别——充分运用实验思维
  4. oracle中的视图详解
  5. java源程序编译型_Java语言的源程序不是编译型的,而是编译解释型的。
  6. [Java] 蓝桥杯ADV-188 算法提高 排列数
  7. java后置过滤器_java - 如何使用zuul将响应主体提取到后置过滤器中
  8. Python编程:从入门到实践 - matplotlib篇 - plot scatter
  9. 图像去噪序列——BM3D图像去噪模型实现
  10. 引用腾讯地图时出现”鉴权失败,请传入正确的key“
  11. MybatisPlus IPage<V>转IPage<B> 封装工具类
  12. 鸿蒙不是Linux也不是安卓
  13. android沙漏动画app,沙漏动画
  14. 混合波束成形|基础:深入浅出5G,毫米波,大规模MIMO与波束赋形
  15. 网络摄像头Androi端显示(mjpeg)源码分析
  16. Vue字符串查重 、数组查重、不重复的文字高亮显示
  17. PBR来龙去脉篇三:一些知识储备
  18. 循环彩灯定时器C语言,PLC基本指令及应用,学会控制彩灯,并循环往复工作
  19. 新一代液晶按键网银USBkey安全分析
  20. 网页游戏《武林英雄》切磋的模拟(文字)

热门文章

  1. 2020年python工资一般多少钱-2020年Python发展前景如何呢?
  2. python手机版idle-Python IDLE下载
  3. python画出心形图-python画心型图案
  4. python三层装饰器-python三大神器===》装饰器
  5. python3.7安装turtle步骤-Python3.6安装turtle模块
  6. python北京理工大学推荐的书-Python教程书籍(北理工第2版)思考练习-第三章
  7. esp32 python-MicroPython for esp32
  8. 在Jetson Xavier NX上安装torchvision编译报错:fatal error: libavcodec/avcodec.h: No such file or directory
  9. RxJava响应式编程学习笔记
  10. hdu2561 第二小整数(排序)