#!/bin/sh if [ -z "${IF_OVS_TYPE}" ]; then exit 0 fi ovs_vsctl() { ovs-vsctl --timeout=5 "$@" } if (ovs_vsctl --version) > /dev/null 2>&1; then :; else exit 0 fi SERVICE_UNIT=/usr/lib/systemd/system/openvswitch-nonetwork.service if [ -f $SERVICE_UNIT ] && [ -x /usr/bin/systemctl ]; then if ! systemctl --quiet is-active openvswitch-nonetwork.service; then systemctl start openvswitch-nonetwork.service fi else if service openvswitch-switch status > /dev/null 2>&1; then service openvswitch-switch start fi fi DPDK_EXTRA="" if [ "${MODE}" = "start" ]; then eval OVS_EXTRA=\"${IF_OVS_EXTRA}\" case "${IF_OVS_TYPE}" in DPDKOVSPort) DPDK_EXTRA="-- set Interface ${IF_DPDK_PORT} type=dpdk" if [ -n "$IF_MULTIQ_THREADS" ]; then DPDK_EXTRA="${DPDK_EXTRA} -- set Interface ${IF_DPDK_PORT} options:n_rxq=${IF_MULTIQ_THREADS}" fi if [ -n "$IF_MTU_REQUEST" ]; then DPDK_EXTRA="${DPDK_EXTRA} -- set Interface ${IF_DPDK_PORT} mtu_request=${IF_MTU_REQUEST}" fi ovs_vsctl -- --may-exist add-port "${IF_OVS_BRIDGE}"\ "${IF_DPDK_PORT}" ${IF_OVS_OPTIONS} \ ${DPDK_EXTRA} \ ${OVS_EXTRA+-- $OVS_EXTRA} ;; DPDKOVSBond) for slave in ${IF_OVS_BONDS}; do DPDK_EXTRA="${DPDK_EXTRA} -- set Interface ${slave} type=dpdk" if [ -n "$IF_MULTIQ_THREADS" ]; then DPDK_EXTRA="${DPDK_EXTRA} -- set Interface ${slave} options:n_rxq=${IF_MULTIQ_THREADS}" fi if [ -n "$IF_MTU_REQUEST" ]; then DPDK_EXTRA="${DPDK_EXTRA} -- set Interface ${slave} mtu_request=${IF_MTU_REQUEST}" fi done ovs_vsctl -- --fake-iface add-bond "${IF_OVS_BRIDGE}"\ "${IFACE}" ${IF_OVS_BONDS} ${IF_OVS_OPTIONS} \ ${DPDK_EXTRA} \ ${OVS_EXTRA+-- $OVS_EXTRA} ;; *) exit 0 ;; esac elif [ "${MODE}" = "stop" ]; then case "${IF_OVS_TYPE}" in DPDKOVSPort) ovs_vsctl -- --if-exists del-port "${IF_OVS_BRIDGE}" "${IF_DPDK_PORT}" ;; DPDKOVSBond) ovs_vsctl -- --if-exists del-port "${IF_OVS_BRIDGE}" "${IFACE}" ;; *) exit 0 ;; esac fi exit 0