正确openvSwitch不同种类port认识
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdm9uemhvdWZ6/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
IP 地址(比方在把eth0增加某个bridge的时候,它的IP地址就失效了。能够把IP地址赋给br,这就是internal port的地址)等等。
/**
* 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认识的更多相关文章
- OpenvSwitch代码分析之bridge和port
ovs-vsctl add-br br0 会在数据库里面加入新bridge的信息ovs-vsctl add-port br0 eth0 会在数据库里面加入新的port信息 void bridge_ru ...
- Python基础知识学习_Day8
一.类的扩展方法 1.静态方法 语法:@staticmethod,静态方法不能访问公有属性,不能访问类.可在实例化后直接调用,并且在方法里可以通过self.调用实例变量或类变量. class eat( ...
- python开发学习-day08(socket高级、socketserver、进程、线程)
s12-20160305-day08 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: ...
- python---异常处理与反射
一.异常处理 1.异常基础 在编程过程中为了增加友好性,在程序出现bug时一般不会将错误信息显示给用户,而是现实一个提示的页面,通俗来说就是不让用户看见大黄页!!! try: pass except ...
- 040.集群网络-CNI网络模型
一 CNM网络模型 1.1 网络模型 生产环境中,跨主机容器间的网络互通已经成为基本要求,更高的要求包括容器固定IP地址.一个容器多个IP地址.多个子网隔离.ACL控制策略.与SDN集成等.目前主流的 ...
- Maven 代理设置
在maven的安装目录下 %MAVEN_HOME%/conf/setting.xml 中进行设置 <proxies> <!-- proxy | Specificatio ...
- 在Swift中应用Grand Central Dispatch(上)转载自的goldenfiredo001的博客
尽管Grand Central Dispatch(GCD)已经存在一段时间了,但并非每个人都知道怎么使用它.这是情有可原的,因为并发很棘手,而且GCD本身基于C的API在 Swift世界中很刺眼. 在 ...
- Consul
1. 什么是consul? 是一个服务管理软件. 支持多数据中心下,分布式高可用的,服务发现和配置共享. consul支持健康检查,允许存储键值对. 一致性协议采用 Raft 算法,用来保证服务的高可 ...
- Spring/Hibernate 应用性能优化的7种方法
对于大多数典型的 Spring/Hibernate 企业应用而言,其性能表现几乎完全依赖于持久层的性能.此篇文章中将介绍如何确认应用是否受数据库约束,同时介绍七种常用的提高应用性能的速成法.本文系 O ...
随机推荐
- web框架之Spring-MVC环境搭建(转)
spring框架jar包 1.下载spring源包spring地址:http://www.springsource.org/download我下的是spring-framework-3.1.0.REL ...
- urses.ascii.ispunct(ch):
Nullege: A Search Engine for Python source code urses.ascii.ispunct(ch): TypeError: 'unicode' object ...
- [置顶] 生成学习算法、高斯判别分析、朴素贝叶斯、Laplace平滑——斯坦福ML公开课笔记5
转载请注明:http://blog.csdn.net/xinzhangyanxiang/article/details/9285001 该系列笔记1-5pdf下载请猛击这里. 本篇博客为斯坦福ML公开 ...
- .NET开发必看资料53个+经典源码77个
目录0豆下载:http://down.51cto.com/data/426019 附件预览: 基于.net构架的留言板项目大全源码 http://down.51cto.com/zt/70 ASP.ne ...
- Android应用Activity、Dialog、PopWindow、Toast窗体加入机制及源代码分析
[工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处.尊重劳动成果] 1 背景 之所以写这一篇博客的原因是由于之前有写过一篇<Android应用setCont ...
- javaEE jdbc编程步骤
1.载入数据库驱动(jar文件) //须要下载一个数据库的jar包,并导入对应的JDBC项目中,创建路径! Class.forName("com.mysql.jdbc.Driver" ...
- 两个div在同一行,两个div不换行
方法一: <div style="display:inline"> <div id="div1" style="float:left ...
- ceSetThreadPriority设置线程优先级~!
ceSetThreadPriority 一直採用SetThreadPriority,结果今天发帖询问线程时间问题,才突然顿悟...发现SetThreadPriority只设置248-255,也就是说就 ...
- PHP图像处理:3D图纸、缩放、回转、剪下、水印(三)
来源:http://www.ido321.com/887.html 5.PHP对图像的旋转 1: <div> 2: <h4>旋转之前</h4> 3: <img ...
- android 如何分析java.lang.IllegalArgumentException: Cannot draw recycled bitmaps异常
这类问题的分析,通常你需要找到bitmap对象已经在那个位置recyle,然后检查代码. 如何定位的位置,其中代码具有对bitmap 目的recyle.能够 Bitmap.java的recycle方法 ...