Handle new style interface config files seen on CentOS 7

This commit is contained in:
Jamie Cameron
2014-08-06 21:04:50 -07:00
parent ce832d3ca7
commit 092be4942e
2 changed files with 63 additions and 30 deletions

View File

@@ -436,26 +436,27 @@ return ($gconfig{'os_type'} eq 'debian-linux' &&
# Returns a human-readable interface type name
sub iface_type
{
if ($_[0] =~ /^(.*)\.(\d+)$/) {
my ($name) = @_;
if ($name =~ /^(.*)\.(\d+)$/) {
return &iface_type("$1")." VLAN";
}
return "PPP" if ($_[0] =~ /^ppp/);
return "SLIP" if ($_[0] =~ /^sl/);
return "PLIP" if ($_[0] =~ /^plip/);
return "Ethernet" if ($_[0] =~ /^eth|em|eno|ens|enp|enx|p\d+p\d+/);
return "Wireless Ethernet" if ($_[0] =~ /^(wlan|ath)/);
return "Arcnet" if ($_[0] =~ /^arc/);
return "Token Ring" if ($_[0] =~ /^tr/);
return "Pocket/ATP" if ($_[0] =~ /^atp/);
return "Loopback" if ($_[0] =~ /^lo/);
return "ISDN rawIP" if ($_[0] =~ /^isdn/);
return "ISDN syncPPP" if ($_[0] =~ /^ippp/);
return "CIPE" if ($_[0] =~ /^cip/);
return "VmWare" if ($_[0] =~ /^vmnet/);
return "Wireless" if ($_[0] =~ /^wlan/);
return "Bonded" if ($_[0] =~ /^bond/);
return "OpenVZ" if ($_[0] =~ /^venet/);
return "Bridge" if ($_[0] =~ /^br/);
return "PPP" if ($name =~ /^ppp/);
return "SLIP" if ($name =~ /^sl/);
return "PLIP" if ($name =~ /^plip/);
return "Ethernet" if ($name =~ /^eth|em|eno|ens|enp|enx|p\d+p\d+/);
return "Wireless Ethernet" if ($name =~ /^(wlan|ath)/);
return "Arcnet" if ($name =~ /^arc/);
return "Token Ring" if ($name =~ /^tr/);
return "Pocket/ATP" if ($name =~ /^atp/);
return "Loopback" if ($name =~ /^lo/);
return "ISDN rawIP" if ($name =~ /^isdn/);
return "ISDN syncPPP" if ($name =~ /^ippp/);
return "CIPE" if ($name =~ /^cip/);
return "VmWare" if ($name =~ /^vmnet/);
return "Wireless" if ($name =~ /^wlan/);
return "Bonded" if ($name =~ /^bond/);
return "OpenVZ" if ($name =~ /^venet/);
return "Bridge" if ($name =~ /^br/);
return $text{'ifcs_unknown'};
}

View File

@@ -62,6 +62,7 @@ sub boot_interfaces
{
local (@rv, $f);
local %bridge_map;
local @active;
opendir(CONF, &translate_filename($net_scripts_dir));
while($f = readdir(CONF)) {
local (%conf, $b);
@@ -81,15 +82,42 @@ while($f = readdir(CONF)) {
$b->{'file'} = "$net_scripts_dir/$f";
push(@rv, $b);
}
elsif ($f !~ /\.(bak|old)$/i && $f =~ /^ifcfg-([a-z0-9:\.]+)$/) {
elsif ($f !~ /\.(bak|old)$/i && $f =~ /^ifcfg-([a-zA-Z_0-9:\.]+)$/) {
# Normal interface
my $fname = $1;
&read_env_file("$net_scripts_dir/$f", \%conf);
$b->{'fullname'} = $conf{'DEVICE'} || $1;
if ($conf{'DEVICE'}) {
# Device is set in the file
$b->{'fullname'} = $conf{'DEVICE'};
}
elsif (&iface_type($fname) ne $text{'ifcs_unknown'}) {
# Filename looks like a regular device
$b->{'fullname'} = $fname;
}
elsif ($conf{'HWADDR'}) {
# Filename is something odd, like Auto_Ethernet .. so
# lookup real device by MAC
if (!@active) {
@active = &active_interfaces();
}
my ($a) = grep { lc($_->{'ether'}) eq
lc($conf{'HWADDR'}) } @active;
next if (!$a);
$b->{'fullname'} = $a->{'fullname'};
# XXX virtuals?
}
else {
# No idea what to do here, probably isn't even an
# interface file
next;
}
if ($b->{'fullname'} =~ /(\S+):(\d+)/) {
$b->{'name'} = $1;
$b->{'virtual'} = $2;
}
else { $b->{'name'} = $b->{'fullname'}; }
else {
$b->{'name'} = $b->{'fullname'};
}
if ($b->{'fullname'} =~ /(\S+)\.(\d+)/) {
my ($k, $v) = split(/\./, $b->{'fullname'});
$b->{'physical'} = $k;
@@ -100,11 +128,14 @@ while($f = readdir(CONF)) {
$b->{'virtual'} ne '' ?
($conf{'ONPARENT'} eq 'yes') :
($conf{'ONBOOT'} eq 'yes');
$b->{'address'} = $conf{'IPADDR'};
$b->{'netmask'} = $conf{'NETMASK'};
$b->{'address'} = $conf{'IPADDR'} || $conf{'IPADDR0'};
$b->{'netmask'} = $conf{'NETMASK'} || $conf{'NETMASK0'};
if (!$conf{'NETMASK'} && $conf{'PREFIX'}) {
$b->{'netmask'} = &prefix_to_mask($conf{'PREFIX'});
}
elsif (!$conf{'NETMASK'} && $conf{'PREFIX0'}) {
$b->{'netmask'} = &prefix_to_mask($conf{'PREFIX0'});
}
$b->{'broadcast'} = $conf{'BROADCAST'};
if (!$b->{'broadcast'} && $b->{'address'} && $b->{'netmask'}) {
$b->{'broadcast'} = &compute_broadcast($b->{'address'},
@@ -204,17 +235,18 @@ if ($_[0]->{'range'} ne "") {
else {
# Saving a normal interface
$conf{'DEVICE'} = $name;
$conf{'IPADDR'} = $_[0]->{'address'};
$conf{'NETMASK'} = $_[0]->{'netmask'};
delete($conf{'PREFIX'});
my $pfx = $conf{'IPADDR0'} ? '0' : '';
$conf{'IPADDR'.$pfx} = $_[0]->{'address'};
$conf{'NETMASK'.$pfx} = $_[0]->{'netmask'};
delete($conf{'PREFIX'.$pfx});
if ($_[0]->{'address'} && $_[0]->{'netmask'}) {
$conf{'NETWORK'} = &compute_network($_[0]->{'address'},
$_[0]->{'netmask'});
$conf{'NETWORK'.$pfx} = &compute_network($_[0]->{'address'},
$_[0]->{'netmask'});
}
else {
$conf{'NETWORK'} = '';
$conf{'NETWORK'.$pfx} = '';
}
$conf{'BROADCAST'} = $_[0]->{'broadcast'};
$conf{'BROADCAST'.$pfx} = $_[0]->{'broadcast'};
if ($_[0]->{'gateway'}) {
$conf{'GATEWAY'} = $_[0]->{'gateway'};
}