diff -Nur e-smith-lib-2.4.0/root/usr/share/perl5/vendor_perl/esmith/ethernet.pm e-smith-lib-2.4.0-fix_bonding/root/usr/share/perl5/vendor_perl/esmith/ethernet.pm --- e-smith-lib-2.4.0/root/usr/share/perl5/vendor_perl/esmith/ethernet.pm 2013-02-23 18:47:46.441079217 +0100 +++ e-smith-lib-2.4.0-fix_bonding/root/usr/share/perl5/vendor_perl/esmith/ethernet.pm 2013-02-23 18:48:57.386558526 +0100 @@ -66,8 +66,21 @@ # Now we should be left only wth ethernet adapters open HW, "/sys/class/net/$nic/address"; my $mac = join("", ); - chomp($mac); close HW; + # If the device is a slave of a bridge, it's real MAC + # address can be found in /proc/net/bonding/bondX + if (-l "/sys/class/net/$nic/master"){ + my $bond = basename (readlink "/sys/class/net/$nic/master"); + local $/ = ''; + open SLAVES, "/proc/net/bonding/$bond"; + my @slaves = ; + close SLAVES; + my @slaveInfo = grep { /^Slave\ Interface:\ $nic/m } @slaves; + foreach (split /\n+/, (join "", @slaveInfo)){ + $mac = $1 if (/^Permanent\ HW\ addr:\ (.*)$/); + } + } + chomp($mac); my $driver = basename (readlink "/sys/class/net/$nic/device/driver"); my $bus = basename (readlink "/sys/class/net/$nic/device/subsystem"); my $desc = $nic;