@@ -27,6 +27,19 @@ assignments. The following OVS-specific variable names are supported:
* "OVSPatchPort", if <name> is a patch port
+ Additionally the following DPDK port types may be available,
+ depends on OVS build- and runtime configuration:
+
+ * "OVSDPDKPort", if <name> is a physical DPDK NIC port (name
+ must start with "dpdk" and end with portid, eg "dpdk0")
+
+ * "OVSDPDKRPort", if <name> is a DPDK ring port (name must
+ start with dpdkr and end with portid, eg "dpdkr0")
+
+ * "OVSDPDKVhostPort" if <name> is a DPDK vhost-cuse port
+
+ * "OVSDPDKVhostUserPort" if <name> is a DPDK vhost-user port
+
- OVS_BRIDGE: If TYPE is anything other than "OVSBridge", set to
the name of the OVS bridge to which the port should be attached.
@@ -206,6 +219,36 @@ TYPE=OVSPatchPort
OVS_BRIDGE=ovsbridge1
OVS_PATCH_PEER=patch-ovs-0
+User bridge:
+
+==> ifcfg-obr0 <==
+
+DEVICE=obr0
+ONBOOT=yes
+DEVICETYPE=ovs
+TYPE=OVSUserBridge
+BOOTPROTO=static
+IPADDR=A.B.C.D
+NETMASK=X.Y.Z.0
+HOTPLUG=no
+
+DPDK NIC port:
+
+==> ifcfg-dpdk0 <==
+
+DPDK vhost-user port:
+DEVICE=dpdk0
+ONBOOT=yes
+DEVICETYPE=ovs
+TYPE=OVSDPDKPort
+OVS_BRIDGE=obr0
+
+==> ifcfg-vhu0 <==
+DEVICE=vhu0
+ONBOOT=yes
+DEVICETYPE=ovs
+TYPE=OVSDPDKVhostUserPort
+OVS_BRIDGE=obr0
Reporting Bugs
--------------
@@ -46,7 +46,7 @@ else
fi
case "$TYPE" in
- OVSBridge)
+ OVSBridge|OVSUserBridge)
${OTHERSCRIPT} ${CONFIG} $2
retval=$?
ovs-vsctl -t ${TIMEOUT} -- --if-exists del-br "$DEVICE"
@@ -59,6 +59,9 @@ case "$TYPE" in
OVSPatchPort|OVSTunnel)
ovs-vsctl -t ${TIMEOUT} -- --if-exists del-port "$OVS_BRIDGE" "$DEVICE"
;;
+ OVSDPDKPort|OVSDPDKRPort|OVSDPDKVhostPort|OVSDPDKVhostUserPort)
+ ovs-vsctl -t ${TIMEOUT} -- --if-exists del-port "$OVS_BRIDGE" "$DEVICE"
+ ;;
*)
echo $"Invalid OVS interface type $TYPE"
exit 1
@@ -72,15 +72,19 @@ else
fi
case "$TYPE" in
- OVSBridge)
+ OVSBridge|OVSUserBridge)
# If bridge already exists and is up, it has been configured through
# other cases like OVSPort, OVSIntPort and OVSBond. If it is down or
# it does not exist, create it. It is possible for a bridge to exist
# because it remained in the OVSDB for some reason, but it won't be up.
+ if [ "${TYPE}" = "OVSUserBridge" ]; then
+ DATAPATH="netdev"
+ fi
if check_device_down "${DEVICE}"; then
ovs-vsctl -t ${TIMEOUT} -- --may-exist add-br "$DEVICE" $OVS_OPTIONS \
${OVS_EXTRA+-- $OVS_EXTRA} \
- ${STP+-- set bridge "$DEVICE" stp_enable="${STP}"}
+ ${STP+-- set bridge "$DEVICE" stp_enable="${STP}"} \
+ ${DATAPATH+-- set bridge "$DEVICE" datapath_type="$DATAPATH"}
else
OVSBRIDGECONFIGURED="yes"
fi
@@ -150,6 +154,22 @@ case "$TYPE" in
ifup_ovs_bridge
ovs-vsctl -t ${TIMEOUT} -- --may-exist add-port "$OVS_BRIDGE" "$DEVICE" $OVS_OPTIONS -- set Interface "$DEVICE" type=patch options:peer="${OVS_PATCH_PEER}" ${OVS_EXTRA+-- $OVS_EXTRA}
;;
+ OVSDPDKPort)
+ ifup_ovs_bridge
+ ovs-vsctl -t ${TIMEOUT} -- --may-exist add-port "$OVS_BRIDGE" "$DEVICE" $OVS_OPTIONS -- set Interface "$DEVICE" type=dpdk ${OVS_EXTRA+-- $OVS_EXTRA}
+ ;;
+ OVSDPDKRPort)
+ ifup_ovs_bridge
+ ovs-vsctl -t ${TIMEOUT} -- --may-exist add-port "$OVS_BRIDGE" "$DEVICE" $OVS_OPTIONS -- set Interface "$DEVICE" type=dpdkr ${OVS_EXTRA+-- $OVS_EXTRA}
+ ;;
+ OVSDPDVhostPort)
+ ifup_ovs_bridge
+ ovs-vsctl -t ${TIMEOUT} -- --may-exist add-port "$OVS_BRIDGE" "$DEVICE" $OVS_OPTIONS -- set Interface "$DEVICE" type=dpdkvhost ${OVS_EXTRA+-- $OVS_EXTRA}
+ ;;
+ OVSDPDKVhostUserPort)
+ ifup_ovs_bridge
+ ovs-vsctl -t ${TIMEOUT} -- --may-exist add-port "$OVS_BRIDGE" "$DEVICE" $OVS_OPTIONS -- set Interface "$DEVICE" type=dpdkvhostuser ${OVS_EXTRA+-- $OVS_EXTRA}
+ ;;
*)
echo $"Invalid OVS interface type $TYPE"
exit 1
Add support for creating a userspace bridge and the four DPDK port types via network scripts + basic documentation. Signed-off-by: Panu Matilainen <pmatilai@redhat.com> --- rhel/README.RHEL | 43 +++++++++++++++++++++++++++ rhel/etc_sysconfig_network-scripts_ifdown-ovs | 5 +++- rhel/etc_sysconfig_network-scripts_ifup-ovs | 24 +++++++++++++-- 3 files changed, 69 insertions(+), 3 deletions(-)