我正在使用OVS和Docker容器作为主机来创建SDN拓扑。我的示例拓扑是:一台ovs交换机和2台连接到它的主机(docker容器)。
HOST1(容器1) OVS HOST2(容器2)
首先,我启动opendaylight Controller ,并通过“ ovs-vsctl set-controller s1 tcp:ip:port ”将我的ovs开关连接到它,之后我用“ docker run -dit --net = none- -name host1 ubuntu:16.04 / bin / bash “,然后我使用” ovs-docker “命令将容器连接到ovs。我可以看到我的开关显示在opendaylight dlux上,但是我无法从一个容器向另一个容器ping。问题是odl不会自动更新流表
这是“ovs-ofctl dump-flow s1”的输出 cookie=0x2b00000000000001, duration=2494.398s, table=0, n_packets=0, n_bytes=0, idle_age=2494, priority=100,dl_type=0x88cc actions=CONTROLLER:65535 cookie=0x2b00000000000001, duration=2494.387s, table=0, n_packets=18, n_bytes=756, idle_age=665, priority=0 actions=drop
但是,当我再次重新启动 Controller 时,一切正常,流添加到我的ovs开关中,并且我可以从一个容器ping到另一个容器。 cookie=0x2b00000000000000, duration=3.087s, table=0, n_packets=0, n_bytes=0, idle_age=3, priority=2,in_port=1 actions=output:2,CONTROLLER:65535 cookie=0x2b00000000000001, duration=3.087s, table=0, n_packets=0, n_bytes=0, idle_age=3, priority=2,in_port=2 actions=output:1,CONTROLLER:65535 cookie=0x2b00000000000001, duration=2919.471s, table=0, n_packets=0, n_bytes=0, idle_age=2919, priority=100,dl_type=0x88cc actions=CONTROLLER:65535 cookie=0x2b00000000000001, duration=2919.46s, table=0, n_packets=18, n_bytes=756, idle_age=1090, priority=0 actions=drop
我知道我可以通过将open api将rest api插入流表来推送流,但是假设您有太多连接到交换机的端口(主机),则必须一一发送流条目。那么有什么方法可以将事件发送到Opendaylight Controller ,以使其自动更新开关流表?
最佳答案
我解决了这个问题,它看起来像l2switch功能在其地址跟踪器上具有 timestamp-update-interval ,默认情况下设置为600000,因此在减小此值(设置为5)之后,ODL Controller 将流推送到开关...这里有完整的文档,可以帮助您开始...
https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL:L2_Switch
关于docker - 自动向连接到Docker主机的ovs交换机添加流,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49625705/