Red Hat Bugzilla – Bug 1278136
ovs-ofctl - version negotiation failed
Last modified: 2016-02-01 11:36:43 EST
Description of problem:
OVS is used in OpenShift v3 with OpenFlow 1.3, however ovs-vsctl cannot negotiate capabilities for this protocol version. It must be specified explicitly which makes troubleshooting harder. Since supported versions are presented by OVS, the utility should automatically detect the proper protocol and use it. At the moment for some reason it reports supporting just version 1.0 (0x01) during negotiation.
Version-Release number of selected component (if applicable):
Steps to Reproduce:
1. set OpenFlow protocol to 1.3 on bridge br0 (done during boot in OpenShift)
# ovs-vsctl set bridge br0 protocols=OpenFlow13
2. try to dump flows
# ovs-ofctl dump-flows br0
2015-11-04T17:45:56Z|00001|vconn|WARN|unix:/var/run/openvswitch/br0.mgmt: version negotiation failed (we support version 0x01, peer supports version 0x04)
ovs-ofctl: br0: failed to connect to socket (Broken pipe)
OFPST_FLOW reply (OF1.3) (xid=0x2):
cookie=0x0, duration=1299.155s, table=0, n_packets=0, n_bytes=0, dl_src=01:00:00:00:00:00/01:00:00:00:00:00 actions=drop
this currently works when specifying the version
# ovs-ofctl dump-flows br0 --protocols=OpenFlow13
ovs-ofctl allows you to set many protocols on the command line, like --protocols=OpenFlow10,OpenFlow13.
That will work for bridges that only support OpenFlow13.
The problem with using any version by default is that mod-flow has different semantics depending on the version. So, instead of behaving differently whenever you use ovs-ofctl mod-flow, the tool defaults to OpenFlow10 only.
Why not use an alias like ovs-ofctl13='ovs-ofctl --protocols=OpenFlow13'?