[kexec-tools] Add support for team devices

Dave Young yangrr at fedoraproject.org
Mon Jan 28 06:04:59 UTC 2013


commit 97e107b5ab5ff1c23f0b9fb8a68c50d0903a8fbf
Author: Cong Wang <amwang at redhat.com>
Date:   Thu Dec 13 22:36:05 2012 +0800

    Add support for team devices
    
    V4: Sync with the latest teamd
    
    V3: Drop patch 2/2 which harms readability
        Move inst_dir to kdump_setup_team()
        Avoid saying why teamdctl fails
        Error out for vlan over team, like bridge
        Remove the useless exit in kdump_get_perm_addr()
    
    V2: remove the tmp config file in /tmp
        split the non-team part
    
    BZ: https://bugzilla.redhat.com/show_bug.cgi?id=874025
    (This BZ is against RHEL7 though...)
    
    Depends on dracut patch:
    http://article.gmane.org/gmane.linux.kernel.initramfs/3043
    
    and depends on latest version of teamd.
    
    This patch adds support for team devices on kdump side.
    I tested team active-backup mode and round-robin mode,
    vmcore can be dumped over ssh successfully.
    
    Note, currently we don't support stacked devices
    on/under team, it is tricky and can be added on request.
    
    Cc: Vivek Goyal <vgoyal at redhat.com>
    Cc: Dave Young <dyoung at redhat.com>
    Cc: Jiri Pirko <jpirko at redhat.com>
    Signed-off-by: Cong Wang <amwang at redhat.com>
    Acked-by: Dave Young <dyoung at redhat.com>

 dracut-module-setup.sh |   42 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 42 insertions(+), 0 deletions(-)
---
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh
index 831439a..5dd4a64 100755
--- a/dracut-module-setup.sh
+++ b/dracut-module-setup.sh
@@ -44,6 +44,10 @@ kdump_is_bond() {
      [ -d /sys/class/net/"$1"/bonding ]
 }
 
+kdump_is_team() {
+     [ -f /usr/bin/teamnl ] && teamnl $1 ports &> /dev/null
+}
+
 kdump_is_vlan() {
      [ -f /proc/net/vlan/"$1" ]
 }
@@ -72,6 +76,18 @@ kdump_get_mac_addr() {
     echo `ip addr show $1 2>/dev/null|awk '/ether/{ print $2 }'`
 }
 
+#Bonding or team master modifies the mac address
+#of its slaves, we should use perm address
+kdump_get_perm_addr() {
+    local addr=$(ethtool -P $1 | sed -e 's/Permanent address: //')
+    if [ -z "$addr" ] || [ "$addr" = "00:00:00:00:00:00" ]
+    then
+        derror "Can't get the permanent address of $1"
+    else
+        echo "$addr"
+    fi
+}
+
 kdump_setup_bridge() {
     local _netdev=$1
     for _dev in `ls /sys/class/net/$_netdev/brif/`; do
@@ -96,6 +112,27 @@ kdump_setup_bond() {
     echo " bondoptions=\"$bondoptions\"" >> ${initdir}/etc/cmdline.d/42bond.conf
 }
 
+kdump_setup_team() {
+    local _netdev=$1
+    local slaves=""
+    for _dev in `teamnl $_netdev ports | awk -F':' '{print $2}'`; do
+        echo -n " ifname=$_dev:$(kdump_get_perm_addr $_dev)" >> ${initdir}/etc/cmdline.d/44team.conf
+        slaves+="$_dev,"
+    done
+    echo " team=$_netdev:$(echo $slaves | sed -e 's/,$//')" >> ${initdir}/etc/cmdline.d/44team.conf
+    #Buggy version teamdctl outputs to stderr!
+    #Try to use the latest version of teamd.
+    teamdctl "$_netdev" config dump > /tmp/$$-$_netdev.conf
+    if [ $? -ne 0 ]
+    then
+        derror "teamdctl failed."
+        exit 1
+    fi
+    inst_dir /etc/teamd
+    inst_simple /tmp/$$-$_netdev.conf "/etc/teamd/$_netdev.conf"
+    rm -f /tmp/$$-$_netdev.conf
+}
+
 kdump_setup_vlan() {
     local _netdev=$1
     local _phydev="$(awk '/^Device:/{print $2}' /proc/net/vlan/"$_netdev")"
@@ -108,6 +145,9 @@ kdump_setup_vlan() {
     if kdump_is_bridge "$_phydev"; then
         derror "Vlan over bridge is not supported!"
         exit 1
+    elif kdump_is_team "$_phydev"; then
+        derror "Vlan over team is not supported!"
+        exit 1
     elif kdump_is_bond "$_phydev"; then
         kdump_setup_bond "$_phydev"
     else
@@ -149,6 +189,8 @@ kdump_setup_netdev() {
         kdump_setup_bridge "$_netdev"
     elif kdump_is_bond "$_netdev"; then
         kdump_setup_bond "$_netdev"
+    elif kdump_is_team "$_netdev"; then
+        kdump_setup_team "$_netdev"
     elif kdump_is_vlan "$_netdev"; then
         kdump_setup_vlan "$_netdev"
     else


More information about the scm-commits mailing list