From f6bf8880613aaaf547409e9282b675ad2d85c6ba Mon Sep 17 00:00:00 2001 From: Panu Matilainen Date: Tue, 1 Dec 2015 16:48:04 +0200 Subject: [PATCH] rhel: Add support DPDK port creation via network scripts Add support for creating a userspace bridge and the four DPDK port types via network scripts + basic documentation. Signed-off-by: Panu Matilainen Acked-by: Aaron Conole Acked-by: Flavio Leitner Signed-off-by: Ben Pfaff --- NEWS | 2 + rhel/README.RHEL | 43 +++++++++++++++++++ rhel/etc_sysconfig_network-scripts_ifdown-ovs | 5 ++- rhel/etc_sysconfig_network-scripts_ifup-ovs | 24 ++++++++++- 4 files changed, 71 insertions(+), 3 deletions(-) diff --git a/NEWS b/NEWS index 81f49e251..e3461f42a 100644 --- a/NEWS +++ b/NEWS @@ -39,6 +39,8 @@ v2.5.0 - xx xxx xxxx system to support virtual network abstraction. OVN complements the existing capabilities of OVS to add native support for virtual network abstractions, such as virtual L2 and L3 overlays and security groups. + - RHEL packaging: + * DPDK ports may now be created via network scripts (see README.RHEL). v2.4.0 - 20 Aug 2015 diff --git a/rhel/README.RHEL b/rhel/README.RHEL index 262067425..54c1b44b4 100644 --- a/rhel/README.RHEL +++ b/rhel/README.RHEL @@ -27,6 +27,19 @@ assignments. The following OVS-specific variable names are supported: * "OVSPatchPort", if is a patch port + Additionally the following DPDK port types may be available, + depends on OVS build- and runtime configuration: + + * "OVSDPDKPort", if is a physical DPDK NIC port (name + must start with "dpdk" and end with portid, eg "dpdk0") + + * "OVSDPDKRPort", if is a DPDK ring port (name must + start with dpdkr and end with portid, eg "dpdkr0") + + * "OVSDPDKVhostPort" if is a DPDK vhost-cuse port + + * "OVSDPDKVhostUserPort" if 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 -------------- diff --git a/rhel/etc_sysconfig_network-scripts_ifdown-ovs b/rhel/etc_sysconfig_network-scripts_ifdown-ovs index 5f78f9ca7..46b6ca5a6 100755 --- a/rhel/etc_sysconfig_network-scripts_ifdown-ovs +++ b/rhel/etc_sysconfig_network-scripts_ifdown-ovs @@ -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 diff --git a/rhel/etc_sysconfig_network-scripts_ifup-ovs b/rhel/etc_sysconfig_network-scripts_ifup-ovs index 478c5c393..f3fc05e12 100755 --- a/rhel/etc_sysconfig_network-scripts_ifup-ovs +++ b/rhel/etc_sysconfig_network-scripts_ifup-ovs @@ -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 -- 2.20.1