ovs

mininet与namespace

  前一阵发现一个问题,就是用mininet起的主机的namespace用ip netns查看不到,一直感觉很奇怪,因为根据mininet官网给出的描述,起创建的switch,host还有自带的controller都是位于namespace下的,其中switch和自带controller都是位于root namespace下,不同host是位于不同的host下面,但是为啥子用ip netns就看不到,明明ip netns就是查看namespace的。今天有时间,上网查了一下,终于知道以前了解的namespace只是冰山一角。本文只给出概括说明,具体不同namespace的详细用法查看文章底部的链接。   总得概括来说其实就是一句话:ip netns add创建的namespace是带name的,而mininet创建的namespace是nameles…

Read more

OpenDaylight OpenvSwitch ping实验

  在本机安装odl和ovs,本来想安装mininet,结果由于centos 6的版本安装真心麻烦到吐,各种软件依赖,依赖完还是失败T_T。自己用ovs+namespace模拟mininet主机。安装完的主机和交换机的拓扑: 首先启动odl hydron版本 执行脚本: #!/bin/bash #input $1 = controller ip, $2 = controller port if [[ $# -ne 2 ]] then echo "parameter illegal" exit 1 fi #del bridge allbr=`ovs-vsctl --timeout=1 list-br` for i in $allbr do ovs-vsctl del-br $i done ovs-vsctl add-br br…

Read more

ovs vlan gre vxlan实验

vlan实验   在宿主即创建了一个ovs bridge,连接至宿主机的出口网卡eht0,再创建了两个vport,然后用virtualbox创建两个虚拟机,分别桥接至两个vport。搭建方式可以参考我的上篇博客:使用VirtualBox创建虚拟机连接ovs bridge。网络拓扑如下:   在没设置vlan tag之前,两个主机是可以相互ping通的。然后设置vlan tag: ovs-vsctl set port vport1 tag=100 发现VM1无法ping通至VM2,同理在VM2设置相同的tag后,两个主机可以互相ping通,位于一个vlan下了。可以用ovs-vsctl list port指令查看port的vlan等配置。 参考: https://www.youtube.com/watch?v=rYW7kQRyUvA htt…

Read more

ovs 处理openflow协议

  ovs中的ofproto模块是用于接收并处理openflows消息。这个消息主要包括两种:primary和service。   primary是与openflow controller连接,用于维持连接并发送Asynchronous消息,比如packet-in。这类消息通常包括一些主动连接,比如tcp,ssl,unix。主要是一些指导流转发的流变更消息   service是用于处理ovs-ofctl消息,这类消息由对端负责连接,不主动发送Asynchronous消息。通常包括一些被动连接,比如ptcp,pssl,punix。主要是一些用于测试,监控,查看的消息,比如添加自定义流表,查看ovs流表信息等。   vswitchd在启动后,处理下发消息流程如下: 1.  vswitchd.c。…

Read more

ovs之hmap数据结构

  hamp是ovs提供的一种哈希表的结构。 0. 普通hash表   以前我们用的哈希表结构一般是如下情况:   左边为一维数组,每个数组元素对应一个映射之后的hash值,每个数组元素对应一条单向链表,该单向链表中所有元素的值域在哈希映射之后一致,且都为表头数组元素的值。链表中一般包含两个域,一个为值域,另一个为指针域。好的哈希映射函数应该使每条链上的长度差不多,而不是某条过长。装填因子的概念就是:散列表中的元素个数与散列表大小的比值。 1. hmap结构   而hmap的结构与之非常相似,其结构如下:   hmap为hash表总节点,其结构如下: /* A hash map. */ struct hmap { struct hmap_node **buckets; /* Mu…

Read more

使用VirtualBox创建虚拟机连接ovs bridge

  在宿主机上创建了一个ovs bridge,给它分配ip。本机的原来上网网卡是eth0,把它down了。并创建两个vport使得VirtualBox创建的虚拟机与vport相连。创建脚本如下: #!/bin/bash ovs-vsctl add-br mybr ovs-vsctl add-port mybr eth0 ifconfig eth0 0 dhclient mybr ifconfig mybr up ip tuntap add mod tap vport1 ip tuntap add mod tap vport2 ifconfig vport1 up ifconfig vport2 up ovs-vsctl add-port mybr vport1 ovs-vsctl add-port mybr vport2 &…

Read more

ovs中流表在内核空间与用户空间的匹配过程

  一直对ovs中facet和subfacet概念搞不清楚,今天仔细查了网上,关于这个的解释信息好少,以下这个是mail list里面的回答,感觉挺正确了: As I understand, there are two kinds of flow in OVS. One is in the user space, e.g. vswitchd, where flow key can include some wildcards to match, while the other lies in kernel space, e.g. openvswitch.ko, where the flow key can never have wildcard. If no wildcard in user space flow (a.k.a facet), the flow from…

Read more

ovs datapath笔记

  这几天在学习ovs的源码,现在来做个datapath的笔记。事先声明,本文的内容摘自博客,源码,视频以及自己的总结等,具体参考文献已经在文章末尾给出,主要参考为Baohua Yang的OpenvSwitch 代码分析。 0.模块介绍   datapath为ovs内核模块,负责执行数据交换,也就是把从接收端口收到的数据包在流表中进行匹配,并执行匹配到的动作。   一个datapath可以对应多个vport,一个vport类似物理交换机的端口概念。一个datapth关联一个flow table,一个flow table包含多个条目,每个条目包括两个内容:一个match/key和一个action,一个match/key可以从包中获取,对应一个action处理行为,最常见的action是在不同flow中进行转发。下图所示的是1…

Read more