From b01562e1827926be70ed81cd023df7a405baf997 Mon Sep 17 00:00:00 2001
From: Olivier Blin <oblin@mandriva.org>
Date: Fri, 20 Aug 2004 04:58:22 +0000
Subject: update mac address in network::ethernet::get_eth_cards to be sure
 iftab is always up-to-date

---
 perl-install/network/ethernet.pm | 20 ++++++++++++++++++++
 perl-install/network/network.pm  |  9 ++-------
 2 files changed, 22 insertions(+), 7 deletions(-)

(limited to 'perl-install')

diff --git a/perl-install/network/ethernet.pm b/perl-install/network/ethernet.pm
index c533d4ade..2659950ef 100644
--- a/perl-install/network/ethernet.pm
+++ b/perl-install/network/ethernet.pm
@@ -82,13 +82,33 @@ sub get_eth_cards_names {
     my ($modules_conf, @all_cards) = @_;
     
     foreach my $card (@all_cards) {
+	#- fix modules aliases
 	$modules_conf->remove_alias($card->[1]);
 	$modules_conf->set_alias($card->[0], $card->[1]);
+
+	#- update iftab
+	update_eth_card_iftab($card->[0]);
     }
 
     { map { $_->[0] => join(': ', $_->[0], $_->[2]) } @all_cards };
 }
 
+#- returns (link_type, mac_address)
+sub get_eth_card_mac_address {
+    my ($intf) = @_;
+    `LC_ALL= LANG= $::prefix/sbin/ip -o link show $intf 2>/dev/null` =~ m|.*link/(\S+)\s([0-9a-z:]+)\s|;
+}
+
+#- write interface MAC address (if any) in iftab
+sub update_eth_card_iftab {
+    my ($intf) = @_;
+    my ($link_type, $mac_address) = get_eth_card_mac_address($intf) or next;
+    my $descriptor = ${{ ether => 'mac', ieee1394 => 'mac_ieee1394' }}{$link_type} or next;
+    substInFile {
+        s/^$intf\s+.*\n//;
+        $_ .= qq($intf\t$descriptor $mac_address\n) if eof
+    } "$::prefix/etc/iftab";
+}
 
 # automatic net aliases configuration
 sub configure_eth_aliases {
diff --git a/perl-install/network/network.pm b/perl-install/network/network.pm
index 26e55beca..4be673b03 100644
--- a/perl-install/network/network.pm
+++ b/perl-install/network/network.pm
@@ -141,15 +141,10 @@ sub write_resolv_conf {
 sub write_interface_conf {
     my ($file, $intf, $_netc, $_prefix) = @_;
 
-    my ($link_type, $mac_address) = `LC_ALL= LANG= $::prefix/sbin/ip -o link show $intf->{DEVICE} 2>/dev/null` =~ m|.*link/(\S+)\s([0-9a-z:]+)\s|;
+    require network::ethernet;
+    my (undef, $mac_address) = network::ethernet::get_eth_card_mac_address($intf->{DEVICE}); 
     $intf->{HWADDR} &&= $mac_address; #- set HWADDR to MAC address if required
 
-    #- write interface MAC address in iftab (if any)
-    my $descriptor = ${{ ether => 'mac', ieee1394 => 'mac_ieee1394' }}{$link_type};
-    if ($mac_address && $descriptor) {
-        substInFile { s/^$intf->{DEVICE}\s+.*\n//; $_ .= qq($intf->{DEVICE}\t$descriptor $mac_address\n) if eof } "$::prefix/etc/iftab";
-    }
-
     my @ip = split '\.', $intf->{IPADDR};
     my @mask = split '\.', $intf->{NETMASK};
 
-- 
cgit v1.2.1