Skip to content

Instantly share code, notes, and snippets.

@up-n-atom
Last active March 9, 2024 03:34
Show Gist options
  • Select an option

  • Save up-n-atom/c4d248cec4412ad94f3e573b45d1c370 to your computer and use it in GitHub Desktop.

Select an option

Save up-n-atom/c4d248cec4412ad94f3e573b45d1c370 to your computer and use it in GitHub Desktop.
TrueNAS Scale SR-IOV Init Script
#!/bin/sh
PF='ens1f${p}'
VF=${PF}'v${v}'
NUM_PF=2
# space seperated number of virtual functions per physical function
NUM_VF=3
# space seperated physical,virtual list
DHCP="1,0"
LF='/var/lib/dhcp/dhclient.leases.'${VF}
PIDF='/var/run/dhclient.'${VF}'.pid'
MAX_RETRIES=2
up_iface() {
IFACE="$1"
RETRIES=0
until $(ip link set "$IFACE" up >/dev/null 2>&1); do
sleep 1
[ $RETRIES -eq $MAX_RETRIES ] && return 1
RETRIES=$(expr $RETRIES + 1)
done
return 0
}
# SR-IOV
for p in $(seq 0 $(expr $NUM_PF - 1)); do
IFACE=$(eval echo $PF)
IFACE_SYSNET="/sys/class/net/$IFACE"
IFACE_NUM_VF_SYSNET="$IFACE_SYSNET/device/sriov_numvfs"
IFACE_NUM_VF=$(echo $NUM_VF | cut -d " " -f $(expr $p + 1))
[ -e "$IFACE_SYSNET" ] || continue
#grep -qsiFv "0" "$IFACE_SYSNET/carrier" || continue
up_iface "$IFACE" || continue
[ -e "$IFACE_NUM_VF_SYSNET" ] || continue
[ $IFACE_NUM_VF -eq 0 ] && continue
echo -n "$IFACE_NUM_VF" > "$IFACE_NUM_VF_SYSNET"
sleep 1
for v in $(seq 0 $(expr $IFACE_NUM_VF - 1)); do
IFACE=$(eval echo $VF)
up_iface "$IFACE"
done
done
# DHCP
while IFS=',' read p v; do
IFACE=$(eval echo $VF)
LEASEFILE=$(eval echo $LF)
PIDFILE=$(eval echo $PIDF)
IFACE_SYSNET="/sys/class/net/$IFACE"
if [ ! -f "$PIDFILE" ] && [ -e "$IFACE_SYSNET" ] && $(grep -qsiFv "0" "$IFACE_SYSNET/carrier"); then
nohup dhclient -lf "$LEASEFILE" -pf "$PIDFILE" "$IFACE" >/dev/null 2>&1 &
fi
done <<-EOF
$(echo $DHCP | tr ' ' '\n')
EOF
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment