function mlxreload {
    rmmod mlx4_ib &> /dev/null
    rmmod mlx4_en &> /dev/null
    rmmod mlx4_core
    rmmod ib_ucm &> /dev/null
    rmmod rdma_ucm &> /dev/null
    rmmod ib_uverbs
    modprobe ib_uverbs disable_raw_qp_enforcement=1
#    modprobe ib_ucm
    modprobe rdma_ucm
    modprobe mlx4_core fast_drop=1 log_num_mgm_entry_size=-1
    modprobe mlx4_en
}

function mlxload {
    reload=0

    param=$(cat /sys/module/mlx4_core/parameters/log_num_mgm_entry_size)
    [ $param -ne -1 ] && reload=1

    [ $reload -eq 1 ] && mlxreload
}

function portset {
    pci=$1
    mode=$2
    ./connectx_port_config -d "$pci" -c "$mode,$mode" &> /dev/null
}

function mlxconf {
    mode=$1

    mlxload

    pci=$(./connectx_port_config -s | grep PCI | grep -Po "[\da-f]{4}:[\da-f]{2}:[\da-f]{2}\.[\da-f]")
    for dev in $pci; do
	echo "Configuring: $dev"
	portset $dev $mode
    done
}

function ipset {
    int="$1"
    ip="$2"

    if [ -n "$ip" ]; then
	ip link  set "$int"  up
	ip addr flush "$int"
	ip addr show dev "$int" | grep "$ip" || ip addr add "$ip/24" dev "$int"
    else
	ip addr flush "$int"
	ip link  set "$int"  down
    fi
}