kdump-lib: Add get_ifcfg_filename() to get the proper ifcfg file
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@redhat.com> Acked-by: Dave Young <dyoung@redhat.com>
This commit is contained in:
parent
56d592d976
commit
65b0f80a5c
103
kdump-lib.sh
103
kdump-lib.sh
@ -279,3 +279,106 @@ is_hostname()
|
||||
fi
|
||||
echo $1 | grep -q "[a-zA-Z]"
|
||||
}
|
||||
|
||||
# Copied from "/etc/sysconfig/network-scripts/network-functions"
|
||||
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
|
||||
LC_ALL= LANG= ip -o link show ${1} 2>/dev/null | \
|
||||
awk '{ print toupper(gensub(/.*link\/[^ ]* ([[:alnum:]:]*).*/,
|
||||
"\\1", 1)); }'
|
||||
fi
|
||||
}
|
||||
|
||||
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}"
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user