From a66b07f99ebce70f6bf29432bbf23d4327a4e22d Mon Sep 17 00:00:00 2001 From: Jan Zeleny Date: Tue, 30 Mar 2010 13:00:13 +0000 Subject: [PATCH] some upstream updates, better fipvlan support, added fcoe_edd.sh script --- fcoe-utils-1.0.12-makefile-data-hook.patch | 8 +- fcoe-utils-1.0.8-includes.patch | 10 +- fcoe-utils.spec | 11 +- fcoe_edd.sh | 234 +++++++++++++++++++++ sources | 2 +- 5 files changed, 254 insertions(+), 11 deletions(-) create mode 100644 fcoe_edd.sh diff --git a/fcoe-utils-1.0.12-makefile-data-hook.patch b/fcoe-utils-1.0.12-makefile-data-hook.patch index c7cf653..a7cfab7 100644 --- a/fcoe-utils-1.0.12-makefile-data-hook.patch +++ b/fcoe-utils-1.0.12-makefile-data-hook.patch @@ -1,11 +1,11 @@ --- fcoe-utils-1.0.12/Makefile.am.orig 2010-03-15 17:02:19.000000000 +0100 +++ fcoe-utils-1.0.12/Makefile.am 2010-03-15 17:02:34.000000000 +0100 -@@ -69,8 +69,3 @@ +@@ -62,8 +62,3 @@ init_d_SCRIPTS = etc/initd/fcoe - dist_noinst_DATA = README COPYING INSTALL fcoe-utils.spec + dist_noinst_DATA = README COPYING INSTALL fcoe-utils.spec etc/config - -install-data-hook: -- if [ ! -f ${fcoe_configdir}/config ] ; then \ -- cp etc/config ${fcoe_configdir}/config; \ +- if [ ! -f ${DESTDIR}${fcoe_configdir}/config ] ; then \ +- cp ${srcdir}/etc/config ${DESTDIR}${fcoe_configdir}/config; \ - fi diff --git a/fcoe-utils-1.0.8-includes.patch b/fcoe-utils-1.0.8-includes.patch index 923b6c3..86585b2 100644 --- a/fcoe-utils-1.0.8-includes.patch +++ b/fcoe-utils-1.0.8-includes.patch @@ -1,11 +1,11 @@ --- fcoe-utils-1.0.8/Makefile.am.orig 2009-07-31 13:28:11.484799253 +0200 +++ fcoe-utils-1.0.8/Makefile.am 2009-07-31 13:28:38.331800646 +0200 @@ -5,7 +5,7 @@ - endif + sbin_PROGRAMS = fcoeadm fcoemon fcping fipvlan fcnsq fcrls ## all targets should look for headers in the include directory --AM_CPPFLAGS = -Wall -I${srcdir}/include -+AM_CPPFLAGS = -Wall -I${srcdir}/include -I/lib/modules/`rpm -q --list kernel | grep "^/lib/modules/.*/build$$" | cut -f4 -d"/" | sort -r | head -1`/build/include - +-AM_CPPFLAGS = -I${srcdir}/include -I${builddir}/include ++AM_CPPFLAGS = -I${srcdir}/include -I${builddir}/include -I/lib/modules/`rpm -q --list kernel | grep "^/lib/modules/.*/build$$" | cut -f4 -d"/" | sort -r | head -1`/build/include ## pass the sysconfdir into the C proprocessor - AM_CFLAGS = -DSYSCONFDIR="\"${sysconfdir}\"" + AM_CPPFLAGS += -DSYSCONFDIR="\"${sysconfdir}\"" + AM_CFLAGS = -Wall diff --git a/fcoe-utils.spec b/fcoe-utils.spec index 6f9388d..837f2e1 100644 --- a/fcoe-utils.spec +++ b/fcoe-utils.spec @@ -1,6 +1,6 @@ Name: fcoe-utils Version: 1.0.12 -Release: 1%{?dist} +Release: 2.20100323git%{?dist} Summary: Fibre Channel over Ethernet utilities Group: Applications/System @@ -13,6 +13,7 @@ URL: http://www.open-fcoe.org # cd .. && gzip fcoe-utils-%{version} Source0: %{name}-%{version}.tar.gz Source1: quickstart.txt +Source2: fcoe_edd.sh Patch0: fcoe-utils-1.0.7-init.patch Patch1: fcoe-utils-1.0.7-init-condrestart.patch Patch2: fcoe-utils-1.0.8-includes.patch @@ -55,6 +56,8 @@ rm -rf $RPM_BUILD_ROOT/etc/init.d install -m 644 %SOURCE1 quickstart.txt mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/fcoe/ cp etc/config $RPM_BUILD_ROOT%{_sysconfdir}/fcoe/config +mkdir -p $RPM_BUILD_ROOT%{_libexecdir}/fcoe +install -m 755 %SOURCE2 $RPM_BUILD_ROOT%{_libexecdir}/fcoe/fcoe_edd.sh %clean @@ -98,9 +101,15 @@ fi %config(noreplace) %{_sysconfdir}/fcoe/config %config(noreplace) %{_sysconfdir}/fcoe/cfg-ethx %{_initrddir}/fcoe +%attr(0755,root,root) %{_libexecdir}/fcoe/fcoe_edd.sh %changelog +* Tue Mar 30 2010 Jan Zeleny - 1.0.12-2.20100323git +- some upstream updates +- better fipvlan support +- added fcoe_edd.sh script + * Tue Mar 16 2010 Jan Zeleny - 1.0.12-1 - rebased to version 1.0.12, improved functionality with lldpad and dcbd diff --git a/fcoe_edd.sh b/fcoe_edd.sh new file mode 100644 index 0000000..31edc2a --- /dev/null +++ b/fcoe_edd.sh @@ -0,0 +1,234 @@ +#!/bin/bash + +# Script to read EDD information from sysfs and +# echo the FCoE interface name and target info. +# This is a work in progress and will be enhanced +# with more options as we progress further. +# +# Author: Supreeth Venkataraman +# Yi Zou +# Intel Corporation +# +# Usage: sysfs_edd.sh -t for getting FCoE boot target information. +# sysfs_edd.sh -i for getting FCoE boot NIC name. +# sysfs_edd.sh -m for getting FCoE boot NIC MAC. +# sysfs_edd.sh -e for getting FCoE boot EDD information. +# sysfs_edd.sh -r for getting FCoE boot EDD interface type and path. +# sysfs_edd.sh -a for getting all FCoE boot information. +# sysfs_edd.sh -h for usage information. +# Optional: use -v to turn on verbose mode. +# +# Notes: +# FCoE Boot Disk is identified by the following format of boot information +# in its corresponding sysfs firmware edd entry, i.e., +# /sys/firmware/edd/int13_dev??/interface +# which is formatted as (for FCoE): +# string format: FIBRE wwid: 8c1342b8a0001620 lun: 7f00 +# Please ref. to T13 BIOS Enhanced Disk Drive Specification v3.0 for more +# defails on EDD. +# + +SYSEDD=/sys/firmware/edd +PREFIX="FIBRE" +VERBOSE= +FCOE_INF= +FCOE_WWN= +FCOE_LUN= +FCOE_EDD= +FCOE_NIC= +FCOE_MAC= + + +# +# +# +LOG() { + if [ -n "$1" ] && [ -n "${VERBOSE}" ]; then + echo "LOG:$1" + fi +} + + +find_fcoe_boot_disk() { + local prefix= + + if [ ! -e $SYSEDD ]; then + LOG "Need kernel EDD support!" + return 1 + fi +# for disk in `find ${SYSEDD} -maxdepth 1 -name 'int13*'` + for disk in ${SYSEDD}/int13_* + do + LOG " checking $disk..." + if [ ! -e ${disk}/interface ]; then + continue; + fi + LOG " checking ${disk}/interface..." + prefix=`awk '{printf $1}' < ${disk}/interface` + if [ "${PREFIX}" != "${prefix}" ]; then + LOG " The FCoE Boot prefix ${FCOE_PRE} is invalid!" + continue; + fi + FCOE_INF=`cat ${disk}/interface` + LOG " found FCoE boot info. from boot rom:${FCOE_INF}..." + + FCOE_WWN=`awk '{printf $3}' < ${disk}/interface` + if [ ${#FCOE_WWN} -ne 16 ]; then + LOG " The FCoE Boot WWID ${FCOE_WWN} is invalid!" + continue; + fi + FCOE_LUN=`awk '{printf $5}' < ${disk}/interface` + if [ -z "${#FCOE_LUN}" ]; then + LOG " The FCoE Boot LUN ${FCOE_WWN} is invalid!" + continue; + fi + # look for the correponding nic + # FIXME: + # 1) only supporst PCI device? + # 2) at initrd time, the nic name is always eth*? + if [ ! -e ${disk}/pci_dev ]; then + LOG "Failed to locate the corresponing PCI device!" + continue; + fi + if [ ! -e ${disk}/pci_dev/net ]; then + LOG "Failed to detect any NIC device!" + continue; + fi + + for nic in ${disk}/pci_dev/net/* + do + if [ -e ${nic}/address ]; then + FCOE_MAC=`cat ${nic}/address` + FCOE_NIC=$(basename ${nic}) + break; + fi + done + if [ -z "${FCOE_MAC}" ] || [ -z "${FCOE_NIC}" ]; then + LOG "Failed to locate the corresponing NIC device!" + continue; + fi + # Found the FCoE Boot Device + FCOE_EDD=$(basename ${disk}) + return 0; + done + return 1 +} + +get_fcoe_boot_all(){ + echo "### FCoE Boot Information ###" + echo "EDD=${FCOE_EDD}" + echo "INF=${FCOE_INF}" + echo "WWN=${FCOE_WWN}" + echo "LUN=${FCOE_LUN}" + echo "NIC=${FCOE_NIC}" + echo "MAC=${FCOE_MAC}" + return 0 +} + +get_fcoe_boot_target() { + if [ -z "${FCOE_WWN}" ] || [ -z "${FCOE_LUN}" ]; then + LOG "No FCoE Boot Target information is found!" + return 1 + fi + echo "WWN=${FCOE_WWN}" + echo "LUN=${FCOE_LUN}" +} + +get_fcoe_boot_inf(){ + if [ -z "${FCOE_INF}" ]; then + LOG "No FCoE Boot INF information is found!" + return 1 + fi + echo "INF=${FCOE_INF}" + return 0 +} + +get_fcoe_boot_mac(){ + if [ -z "${FCOE_MAC}" ]; then + LOG "No FCoE Boot NIC MAC information is found!" + return 1 + fi + echo "MAC=${FCOE_MAC}" + return 0 +} + +get_fcoe_boot_ifname(){ + if [ -z "${FCOE_NIC}" ]; then + LOG "No FCoE Boot NIC information is found!" + return 1 + fi + echo "NIC=${FCOE_NIC}" + return 0 +} + +get_fcoe_boot_edd(){ + if [ -z "${FCOE_EDD}" ]; then + LOG "No FCoE Boot Disk EDD information is found!" + return 1 + fi + echo "EDD=${FCOE_EDD}" + return 0 +} + + +# parse options +prog=$(basename $0) +while getopts "timeravh" OptionName; do + case "$OptionName" in + t) + action=get_fcoe_boot_target + ;; + i) + action=get_fcoe_boot_ifname + ;; + m) + action=get_fcoe_boot_mac + ;; + e) + action=get_fcoe_boot_edd + ;; + r) + action=get_fcoe_boot_inf + ;; + a) + action=get_fcoe_boot_all + ;; + v) + VERBOSE="yes" + ;; + h) + echo "Usage: ${prog} -t for getting FCoE boot target information." + echo " ${prog} -i for getting FCoE boot NIC name." + echo " ${prog} -m for getting FCoE boot NIC MAC." + echo " ${prog} -e for getting FCoE boot EDD information." + echo " ${prog} -r for getting FCoE boot EDD interface type and path." + echo " ${prog} -a for getting all FCoE boot information." + echo " ${prog} -h for usage information." + echo " Optional: use -v to turn on verbose mode." + exit 0 + ;; + *) + echo "Invalid Option. Use -h option for help." + exit 1 + ;; + esac +done +if [ -z "${action}" ]; then + echo "Must specify at least -t, -i, -m, -e, -r, -a, or -h." + echo "Use -h option for help." + exit 1 +fi +# Locate FCoE boot disk and nic information +find_fcoe_boot_disk +if [ $? -ne 0 ]; then + echo "No FCoE boot disk information is found in EDD!" + exit 1 +fi +if [ -z "${FCOE_EDD}" ]; then + echo "No FCoE boot disk is found in EDD!" + exit 1; +fi + +${action} + +exit $? diff --git a/sources b/sources index fe779a9..c1689a3 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -bd64197b18f9d743120846c03b66dcf5 fcoe-utils-1.0.12.tar.gz +a1a195ff5178175c84ebe6e3a9e97e7b fcoe-utils-1.0.12.tar.gz