block_is_fcoe $1 || return 1
[[ $hostonly ]] || [[ $mount_needs ]] && {
for_each_host_dev_and_slaves is_fcoe || return 255
require_binaries dcbtool fipvlan lldpad ip readlink fcoemon fcoeadm || return 1
echo network rootfs-block
instmods fcoe libfcoe 8021q edd bnx2fc
read iflink < $link/iflink
for if in /sys/class/net/* ; do
if [ $idx -eq $iflink ] ; then
for c in /sys/bus/fcoe/devices/ctlr_* ; do
read enabled < $c/enabled
[ $enabled -eq 0 ] && continue
if [ $mode = "VN2VN" ] ; then
s=$(dcbtool gc ${i##*/} dcb 2>/dev/null | sed -n 's/^DCB State:\t*\(.*\)/\1/p')
p=$(get_vlan_parent ${i})
s=$(dcbtool gc ${p} dcb 2>/dev/null | sed -n 's/^DCB State:\t*\(.*\)/\1/p')
if [ "$s" = "on" ] ; then
# Some Combined Network Adapters(CNAs) implement DCB in firmware.
# Do not run software-based DCB or LLDP on CNAs that implement DCB.
# If the network interface provides hardware DCB/DCBX capabilities,
# DCB_REQUIRED in "/etc/fcoe/cfg-xxx" is expected to set to "no".
# Force "nodcb" if there's any DCB_REQUIRED="no"(child or vlan parent).
grep -q "^[[:blank:]]*DCB_REQUIRED=\"no\"" /etc/fcoe/cfg-${i##*/} &>/dev/null
[ $? -eq 0 ] && dcb="nodcb"
grep -q "^[[:blank:]]*DCB_REQUIRED=\"no\"" /etc/fcoe/cfg-${p} &>/dev/null
[ $? -eq 0 ] && dcb="nodcb"
echo "ifname=${ifname}:${mac}"
echo "fcoe=${ifname}:${dcb}:${mode}"
inst_multiple ip dcbtool fipvlan lldpad readlink lldptool fcoemon fcoeadm
if [ -e "/etc/hba.conf" ]; then
inst_libdir_file 'libhbalinux.so*'
inst_simple "/etc/hba.conf"
mkdir -m 0755 -p "$initdir/var/lib/lldpad"
mkdir -m 0755 -p "$initdir/etc/fcoe"
if [[ $hostonly_cmdline == "yes" ]] ; then
local _fcoeconf=$(cmdline)
[[ $_fcoeconf ]] && printf "%s\n" "$_fcoeconf" >> "${initdir}/etc/cmdline.d/95fcoe.conf"
inst_multiple /etc/fcoe/cfg-*
inst "$moddir/fcoe-up.sh" "/sbin/fcoe-up"
inst "$moddir/fcoe-edd.sh" "/sbin/fcoe-edd"
inst "$moddir/fcoe-genrules.sh" "/sbin/fcoe-genrules.sh"
inst_hook pre-trigger 03 "$moddir/lldpad.sh"
inst_hook cmdline 99 "$moddir/parse-fcoe.sh"
inst_hook cleanup 90 "$moddir/cleanup-fcoe.sh"
inst_hook shutdown 40 "$moddir/stop-fcoe.sh"