watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdm9uemhvdWZ6/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

同一主机上的OVS中能够创建多个网桥(即多个datapath实例),每一个bridge能够通过patch ports互联,而netdev ports是OVS对底层物理port的抽象封装。internal 类型的port比較不好理解,能够看做每一个OVS交换机有个能够用来处理数据报的本地port。能够为这个网络设备配置
IP 地址(比方在把eth0增加某个bridge的时候,它的IP地址就失效了。能够把IP地址赋给br,这就是internal port的地址)等等。

     以下列出vport相关的数据结构,尽管前面的文章有涉及。可是不够集中全面。
/**
* struct vport抽象的是datapath中的每一个端口,
*/
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>/brport
char 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 vport_parms - parameters for creating a new vport
* 端口參数。当创建一个新的vport端口是要传入的參数
*/
struct vport_parms {
const char *name;
enum ovs_vport_type type; //端口的类型
struct nlattr *options; //保存从netlink msg中得到的属性 /* For ovs_vport_alloc(). */
struct datapath *dp; //端口属于哪个datapath(网桥)
u16 port_no; //端口号
u32 upcall_portid; //和用户空间通信的netlink 端口
}; /**
* struct vport_ops -定义虚拟端口的类型(能做的操作)
*/
struct vport_ops {
enum ovs_vport_type type; // 类型值,OVS_VPORT_TYPE_*。
u32 flags; // VPORT_F_*,影响通用虚拟端口层怎样处理这个vport。 /* Called at module init and exit respectively. */
int (*init)(void); // 模块初始化;假设设置了标识VPORT_F_REQUIRED,那么该函数运行失败后
//停止模块载入。否则仅仅是导致不创建这种类型的vport。 void (*exit)(void); //模块卸载之时。 /* Called with RTNL lock. */
struct vport *(*create)(const struct vport_parms *);
//依据运行參数来创建一个新的vport,失败则返回相应的 ERR_PTR() 值;
void (*destroy)(struct vport *);
// 销毁这个vport,必须调用vport_free()释放(由于利用的是RCU。所以等到 RCU grace period之后实际运行) int (*set_options)(struct vport *, struct nlattr *); //配置这个vport,假设不支持改动,就把该函数指针置为Null。
int (*get_options)(const struct vport *, struct sk_buff *);//获得这个vport相关的配置属性到sk_buff中; int (*set_addr)(struct vport *, const unsigned char *);//设置MAC地址; /* Called with rcu_read_lock or RTNL lock. */
const char *(*get_name)(const struct vport *); // 设备名
const unsigned char *(*get_addr)(const struct vport *);
void (*get_config)(const struct vport *, void *);
struct kobject *(*get_kobj)(const struct vport *);//获得这个设备关联的kobj对象; unsigned (*get_dev_flags)(const struct vport *);//设备标志;
int (*is_running)(const struct vport *);
unsigned char (*get_operstate)(const struct vport *); //设备的工作状态 int (*get_ifindex)(const struct vport *);//和这个设备关联的接口号(system interface index ) int (*get_mtu)(const struct vport *);//设备的MTU,假设像tunnel这种就没有MTU,返回null; int (*send)(struct vport *, struct sk_buff *); //在该设备上发送一个packet,返回发送的长度;
}; /* List of statically compiled vport implementations. Don't forget to also
* add yours to the list at the top of vport.c. */
extern const struct vport_ops ovs_netdev_vport_ops;
extern const struct vport_ops ovs_internal_vport_ops;
extern const struct vport_ops ovs_patch_vport_ops;

版权声明:本文博客原创文章,博客,未经同意,不得转载。

正确openvSwitch不同种类port认识的更多相关文章

  1. OpenvSwitch代码分析之bridge和port

    ovs-vsctl add-br br0 会在数据库里面加入新bridge的信息ovs-vsctl add-port br0 eth0 会在数据库里面加入新的port信息 void bridge_ru ...

  2. Python基础知识学习_Day8

    一.类的扩展方法 1.静态方法 语法:@staticmethod,静态方法不能访问公有属性,不能访问类.可在实例化后直接调用,并且在方法里可以通过self.调用实例变量或类变量. class eat( ...

  3. python开发学习-day08(socket高级、socketserver、进程、线程)

    s12-20160305-day08 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: ...

  4. python---异常处理与反射

    一.异常处理 1.异常基础 在编程过程中为了增加友好性,在程序出现bug时一般不会将错误信息显示给用户,而是现实一个提示的页面,通俗来说就是不让用户看见大黄页!!! try: pass except ...

  5. 040.集群网络-CNI网络模型

    一 CNM网络模型 1.1 网络模型 生产环境中,跨主机容器间的网络互通已经成为基本要求,更高的要求包括容器固定IP地址.一个容器多个IP地址.多个子网隔离.ACL控制策略.与SDN集成等.目前主流的 ...

  6. Maven 代理设置

    在maven的安装目录下 %MAVEN_HOME%/conf/setting.xml 中进行设置 <proxies>    <!-- proxy     | Specificatio ...

  7. 在Swift中应用Grand Central Dispatch(上)转载自的goldenfiredo001的博客

    尽管Grand Central Dispatch(GCD)已经存在一段时间了,但并非每个人都知道怎么使用它.这是情有可原的,因为并发很棘手,而且GCD本身基于C的API在 Swift世界中很刺眼. 在 ...

  8. Consul

    1. 什么是consul? 是一个服务管理软件. 支持多数据中心下,分布式高可用的,服务发现和配置共享. consul支持健康检查,允许存储键值对. 一致性协议采用 Raft 算法,用来保证服务的高可 ...

  9. Spring/Hibernate 应用性能优化的7种方法

    对于大多数典型的 Spring/Hibernate 企业应用而言,其性能表现几乎完全依赖于持久层的性能.此篇文章中将介绍如何确认应用是否受数据库约束,同时介绍七种常用的提高应用性能的速成法.本文系 O ...

随机推荐

  1. 【淡墨Unity3D Shader计划】一间 创建一个游戏场景 &amp; 第一Shader写作

    本系列文章由@浅墨_毛星云 出品.转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/40723789 作者:毛星云(浅墨)  ...

  2. c++进阶

    对网络编程/多线程/系统编程有一定了解:4:对ngnix,redis,memcache有一定了解:5:有高并发服务开发经验优先: 因为C/C++在嵌入式.移动互联网.物联网有很大的优势,有很多人就靠一 ...

  3. 对consistencygroup的一些研究和实践

    声明: 本博客欢迎转载,但请保留原作者信息! 作者:李人可 团队:华为杭州OpenStack团队 consistency group,直译是一致性组,是Juno版本号cinder新引进的一个概念.顾名 ...

  4. 关于java mail 发邮件的问题总结(转)

    今天项目中有需要用到java mail发送邮件的功能,在网上找到相关代码,代码如下: import java.io.IOException; import java.util.Properties; ...

  5. 一个测试SQL2005数据库连接JSP档

    在这里,在SQL 2005中间InterLib数据库案例.得到InterLib/tb_booktype目录. 的影响,如下面的: watermark/2/text/aHR0cDovL2Jsb2cuY3 ...

  6. 使用Visual Studio 2010 创建简单的Silverlight应用程序

    使用Visual Studio 2010 创建简单的Silverlight应用程序 Silverlight是创建动态的引人的RIAs(Rich Internet Application)的新方法.这里 ...

  7. Spring 事情具体详尽的解释

    一.Spring事务管理  1. Spring事务管理机制 三个核心部分  1) PlatformTransactionManager  平台的事务管理器  commit 提交事务.rollback ...

  8. SharePoint Server 2010 删除Web应用

    SharePoint Server 2010 删除Web应用         因为之前的测试.在SharePointserver创建于非常多Web应用(我是在本机Win7系统上安装的SharePoin ...

  9. 使用C#和.NET 4编写的并行应用程序“多核并发编程的规则”

    “多核并发编程的规则” 规则的描述如下 1.      并发编程的思想—这条规则就是要谨记并发编程思想进行设计,就像前边章节所提交的. 2.      面向抽象编程-你可以利用.NET4中的TPL提供 ...

  10. sql server基本流程语句