On 2016/05/19 at 15:47, Dave Young wrote:
Hi, Xunlei
On 04/25/16 at 12:39pm, Xunlei Pang wrote:
> Previously, we assumed the ifcfg file of a network "interface" is
> "/etc/sysconfig/network-scripts/ifcfg-<interface>", but actually
> it is not the case.
>
> For example, for network interface "enp0s25", we are able to
> generate like "/etc/sysconfig/network-scripts/ifcfg-enp0s25-test"
> for it via network-manager.
>
> The "suffix" in "ifcfg-<suffix>" is actually a
"configuration"
> name not "interface" name, though normally we use the
"interface"
> name as its "configuration" name. You can refer to "man ifup"
> for some detail.
>
> So, this patch adds some assistant helpers to acquire the right
> ifcfg file for an interface. Borrow some logic from script below:
> "/etc/sysconfig/network-scripts/network-functions"
>
> Signed-off-by: Xunlei Pang <xlpang(a)redhat.com>
> ---
> kdump-lib.sh | 102 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 102 insertions(+)
>
> diff --git a/kdump-lib.sh b/kdump-lib.sh
> index 4d34206..90913c5 100755
> --- a/kdump-lib.sh
> +++ b/kdump-lib.sh
> @@ -230,3 +230,105 @@ is_hostname()
> fi
> echo $1 | grep -q "[a-zA-Z]"
> }
> +
> +get_hwaddr()
> +{
> + if [ -f "/sys/class/net/${1}/address" ]; then
> + awk '{ print toupper($0) }' < /sys/class/net/${1}/address
> + elif [ -d "/sys/class/net/${1}" ]; then
> + ip -o link show ${1} 2>/dev/null | \
> + awk '{ print toupper(gensub(/.*link\/[^ ]* ([[:alnum:]:]*).*/,
> + "\\1", 1)); }'
> + fi
> +}
I'm not sure we are using same version of Fedora, in F23 there's LC_ALL= LANG=
before ip -o, ditto for other ip callback below.
It has "LC_ALL= LANG=" originally, I will add it.
If we copy the functions it may be better to keep them as is and add comments
to explain these functions are copied from where to fix what issues..
eg.
# Copy /etc/sysconfig/network-scripts/network-functions functions for...
...
# End copy
I will improve this.
Regards,
Xunlei
> +
> +get_ifcfg_by_device()
> +{
> + grep -E -i -l "^[[:space:]]*DEVICE=\"*${1}\"*[[:space:]]*$"
\
> + /etc/sysconfig/network-scripts/ifcfg-* 2>/dev/null | head -1
> +}
> +
> +get_ifcfg_by_hwaddr()
> +{
> + grep -E -i -l "^[[:space:]]*HWADDR=\"*${1}\"*[[:space:]]*$"
\
> + /etc/sysconfig/network-scripts/ifcfg-* 2>/dev/null | head -1
> +}
> +
> +get_ifcfg_by_uuid()
> +{
> + grep -E -i -l "^[[:space:]]*UUID=\"*${1}\"*[[:space:]]*$" \
> + /etc/sysconfig/network-scripts/ifcfg-* 2>/dev/null | head -1
> +}
> +
> +get_ifcfg_by_name()
> +{
> + grep -E -i -l "^[[:space:]]*NAME=\"*${1}\"*[[:space:]]*$" \
> + /etc/sysconfig/network-scripts/ifcfg-* 2>/dev/null | head -1
> +}
> +
> +is_nm_running()
> +{
> + [ "$(LANG=C nmcli -t --fields running general status 2>/dev/null)"
= "running" ]
> +}
> +
> +is_nm_handling()
> +{
> + LANG=C nmcli -t --fields device,state dev status 2>/dev/null \
> + | grep -q "^\(${1}:connected\)\|\(${1}:connecting.*\)$"
> +}
> +
> +# $1: netdev name
> +get_ifcfg_nmcli()
> +{
> + local nm_uuid nm_name
> + local ifcfg_file
> +
> + # Get the active nmcli config name of $1
> + if is_nm_running && is_nm_handling "${1}" ; then
> + # The configuration "uuid" and "name" generated by nm is
wrote to
> + # the ifcfg file as "UUID=<nm_uuid>" and
"NAME=<nm_name>".
> + nm_uuid=$(LANG=C nmcli -t --fields uuid,device c show --active
2>/dev/null \
> + | grep "${1}" | head -1 | cut -d':' -f1)
> + nm_name=$(LANG=C nmcli -t --fields name,device c show --active
2>/dev/null \
> + | grep "${1}" | head -1 | cut -d':' -f1)
> + ifcfg_file=$(get_ifcfg_by_uuid "${nm_uuid}")
> + [ -z "${ifcfg_file}" ] && ifcfg_file=$(get_ifcfg_by_name
"${nm_name}")
> + fi
> +
> + echo -n "${ifcfg_file}"
> +}
> +
> +# $1: netdev name
> +get_ifcfg_legacy()
> +{
> + local ifcfg_file
> +
> + ifcfg_file="/etc/sysconfig/network-scripts/ifcfg-${1}"
> + [ -f "${ifcfg_file}" ] && echo -n "${ifcfg_file}"
&& return
> +
> + ifcfg_file=$(get_ifcfg_by_name "${1}")
> + [ -f "${ifcfg_file}" ] && echo -n "${ifcfg_file}"
&& return
> +
> + local hwaddr=$(get_hwaddr "${1}")
> + if [ -n "$hwaddr" ]; then
> + ifcfg_file=$(get_ifcfg_by_hwaddr "${hwaddr}")
> + [ -f "${ifcfg_file}" ] && echo -n
"${ifcfg_file}" && return
> + fi
> +
> + ifcfg_file=$(get_ifcfg_by_device "${1}")
> +
> + echo -n "${ifcfg_file}"
> +}
> +
> +# $1: netdev name
> +# Return the ifcfg file whole name(including the path) of $1 if any.
> +get_ifcfg_filename() {
> + local ifcfg_file
> +
> + ifcfg_file=$(get_ifcfg_nmcli "${1}")
> + if [ -z "${ifcfg_file}" ]; then
> + ifcfg_file=$(get_ifcfg_legacy "${1}")
> + fi
> +
> + echo -n "${ifcfg_file}"
> +}
> --
> 1.8.3.1
> _______________________________________________
> kexec mailing list
> kexec(a)lists.fedoraproject.org
>
http://lists.fedoraproject.org/admin/lists/kexec@lists.fedoraproject.org
Thanks
Dave