#!/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"
                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"
                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
