#!/bin/bash

source ./cmd_utils.sh
source ./kernel_config_utils.sh
source ./net_utils.sh

veth_check() {
    local is_error=false

    if ! kernel_config_check CONFIG_VETH veth; then
        return 1
    fi

    ifname="dodo"
    peer_ifname="lala"

    netif_delete $ifname
    netif_delete $peer_ifname
    while :
    do
        if ! ${IP_CMD} link add name $ifname type veth peer name $peer_ifname; then
            echo "create veth failed"
            is_error=true
            break
        fi
        if ! netif_check $ifname; then
            echo "netif not exist: ifname $ifname"
            is_error=true
            break
        fi
        if ! netif_check $peer_ifname; then
            echo "netif not exist: peer_ifname $peer_ifname"
            is_error=true
            break
        fi

        if ! ${ETHTOOL_CMD} --show-channels $ifname > /dev/null 2>&1; then
            echo "veth not support multi channels: ifname $ifname"
            is_error=true
            break
        fi
        if ! ${ETHTOOL_CMD} --show-channels $peer_ifname > /dev/null 2>&1; then
            echo "veth not support multi channels: peer_ifname $peer_ifname"
            is_error=true
            break
        fi

        break
    done
    netif_delete $ifname
    netif_delete $peer_ifname
    if [ "$is_error" == "true" ]; then
        return 1
    fi

    return 0
}

