summaryrefslogtreecommitdiffstats
path: root/perl-install/network.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/network.pm')
-rw-r--r--perl-install/network.pm206
1 files changed, 48 insertions, 158 deletions
diff --git a/perl-install/network.pm b/perl-install/network.pm
index 2c118222a..29edb4ff3 100644
--- a/perl-install/network.pm
+++ b/perl-install/network.pm
@@ -3,38 +3,19 @@ package network;
use diagnostics;
use strict;
-#-######################################################################################
-#- misc imports
-#-######################################################################################
use Socket;
-use common qw(:common :file :system :functional);
+use common qw(:common :file :system);
use detect_devices;
-use run_program;
+use modules;
use log;
-#-######################################################################################
-#- Functions
-#-######################################################################################
+1;
+
+
sub read_conf {
my ($file) = @_;
my %netc = getVarsFromSh($file);
- $netc{dnsServer} = delete $netc{NS0};
- \%netc;
-}
-
-sub read_resolv_conf {
- my ($file) = @_;
- my %netc;
- my @l;
-
- local *F;
- open F, $file or die "cannot open $file: $!";
- foreach (<F>) {
- push @l, $1 if (/^\s*nameserver\s+([^\s]+)/);
- }
-
- $netc{$_} = shift @l foreach qw(dnsServer dnsServer2 dnsServer3);
\%netc;
}
@@ -48,37 +29,47 @@ sub read_interface_conf {
\%intf;
}
-sub up_it {
- my ($prefix, $intfs) = @_;
- $_->{isUp} and return foreach @$intfs;
- my $f = "/etc/resolv.conf"; symlink "$prefix/$f", $f;
- run_program::rooted($prefix, "/etc/rc.d/init.d/network", "start");
- $_->{isUp} = 1 foreach @$intfs;
-}
-sub down_it {
- my ($prefix, $intfs) = @_;
- run_program::rooted($prefix, "/etc/rc.d/init.d/network", "stop");
- $_->{isUp} = 1 foreach @$intfs;
-}
-
sub write_conf {
my ($file, $netc) = @_;
add2hash($netc, {
- NETWORKING => "yes",
- FORWARD_IPV4 => "false",
+ NETWORKING => "yes",
+ FORWARD_IPV4 => "false",
HOSTNAME => "localhost.localdomain",
+ DOMAINNAME => "localdomain",
});
- add2hash($netc, { DOMAINNAME => $netc->{HOSTNAME} =~ /\.(.*)/ });
+
+ setVarsInSh($file, $netc, qw(NETWORKING FORWARD_IPV4 HOSTNAME DOMAINNAME GATEWAY GATEWAYDEV));
+}
- setVarsInSh($file, $netc, qw(NETWORKING FORWARD_IPV4 HOSTNAME DOMAINNAME GATEWAY GATEWAYDEV NISDOMAIN));
+sub add2hosts {
+ my ($file, $ip, $hostname) = @_;
+ my %l = ($ip => $hostname);
+
+ local *F;
+ if (-e $file) {
+ open F, $file or die "cannot open $file: $!";
+ /\s*(\S+)(.*)/ and $l{$1} = $2 foreach <F>;
+ }
+ log::l("writing host information to $file");
+ open F, ">$file" or die "cannot write $file: $!";
+ while (my ($ip, $v) = each %l) {
+ print F "$ip";
+ if ($v =~ /^\s/) {
+ print F $v;
+ } else {
+ print F "\t\t$v";
+ print F " $1" if $v =~ /(.*?)\./;
+ }
+ print F "\n";
+ }
}
sub write_resolv_conf {
my ($file, $netc) = @_;
- #- We always write these, even if they were autoconfigured. Otherwise, the reverse name lookup in the install doesn't work.
- unless ($netc->{DOMAINNAME} || dnsServers($netc)) {
+ # We always write these, even if they were autoconfigured. Otherwise, the reverse name lookup in the install doesn't work.
+ unless ($netc->{DOMAINNAME} || $netc->{dnsServers}) {
unlink($file);
log::l("neither domain name nor dns server are configured");
return 0;
@@ -88,152 +79,51 @@ sub write_resolv_conf {
local *F;
open F, "> $file" or die "cannot write $file: $!";
print F "search $netc->{DOMAINNAME}\n" if $netc->{DOMAINNAME};
- print F "nameserver $_\n" foreach dnsServers($netc);
+ print F "nameserver $_\n" foreach @{$netc->{dnsServers}};
print F "#$_" foreach @l;
- #-res_init(); # reinit the resolver so DNS changes take affect
+ #res_init(); # reinit the resolver so DNS changes take affect
1;
}
sub write_interface_conf {
my ($file, $intf) = @_;
- my @ip = split '\.', $intf->{IPADDR};
- my @mask = split '\.', $intf->{NETMASK};
- add2hash($intf, {
- BROADCAST => join('.', mapn { int $_[0] | ~int $_[1] & 255 } \@ip, \@mask),
- NETWORK => join('.', mapn { int $_[0] & $_[1] } \@ip, \@mask),
- ONBOOT => bool2yesno(!member($intf->{DEVICE}, map { $_->{device} } detect_devices::probeall())),
- });
+ add2hash($intf, { ONBOOT => "yes" });
setVarsInSh($file, $intf, qw(DEVICE BOOTPROTO IPADDR NETMASK NETWORK BROADCAST ONBOOT));
}
-sub add2hosts {
- my ($file, $hostname, @ips) = @_;
- my %l;
- $l{$_} = $hostname foreach @ips;
-
- local *F;
- if (-e $file) {
- open F, $file or die "cannot open $file: $!";
- /\s*(\S+)(.*)/ and $l{$1} = $2 foreach <F>;
- }
- log::l("writing host information to $file");
- open F, ">$file" or die "cannot write $file: $!";
- while (my ($ip, $v) = each %l) {
- $ip or next;
- print F "$ip";
- if ($v =~ /^\s/) {
- print F $v;
- } else {
- print F "\t\t$v";
- print F " $1" if $v =~ /(.*?)\./;
- }
- print F "\n";
- }
-}
-# The interface/gateway needs to be configured before this will work!
+# The interface/gateway needs to be configured before this will work!
sub guessHostname {
my ($prefix, $netc, $intf) = @_;
- $intf->{isUp} && dnsServers($netc) or return 0;
+ $intf->{isUp} && $netc->{dnsServers} or return 0;
$netc->{HOSTNAME} && $netc->{DOMAINNAME} and return 1;
write_resolv_conf("$prefix/etc/resolv.conf", $netc);
+# winStatus(40, 3, _("Hostname"), _("Determining host name and domain..."));
my $name = gethostbyaddr(Socket::inet_aton($intf->{IPADDR}), AF_INET) or log::l("reverse name lookup failed"), return 0;
log::l("reverse name lookup worked");
- add2hash($netc, { HOSTNAME => $name });
+ add2hash($netc, { HOSTNAME => $name, DOMAINNAME => $name =~ /\.(.*)/ });
1;
}
sub addDefaultRoute {
my ($netc) = @_;
- c::addDefaultRoute($netc->{GATEWAY}) if $netc->{GATEWAY};
+ c::addDefaultRoute($netc->{gateway}) if $netc->{gateway} || !$::testing;
}
-sub sethostname {
- my ($netc) = @_;
- syscall_('sethostname', $netc->{HOSTNAME}, length $netc->{HOSTNAME}) or log::l("sethostname failed: $!");
-}
+sub getAvailableNetDevice {
+ my $device = detect_devices::getNet();
-sub resolv($) {
- my ($name) = @_;
- is_ip($name) and return $name;
- my $a = join(".", unpack "C4", (gethostbyname $name)[4]);
- #-log::l("resolved $name in $a");
- $a;
-}
-
-sub dnsServers {
- my ($netc) = @_;
- grep { $_ } map { $netc->{$_} } qw(dnsServer dnsServer2 dnsServer3);
-}
-
-sub findIntf {
- my ($intf, $device) = @_;
- my ($l) = grep { $_->{DEVICE} eq $device } @$intf;
- push @$intf, $l = { DEVICE => $device } unless $l;
- $l;
-}
-#PAD \s* a la fin
-my $ip_regexp = qr/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
-sub is_ip {
- my ($ip) = @_;
- return 0 unless $ip =~ $ip_regexp;
- my @fields = ($1, $2, $3, $4);
- foreach (@fields) {
- return 0 if $_ < 0 || $_ > 255;
- }
- return 1;
-}
-
-sub netmask {
- my ($ip) = @_;
- return "255.255.255.0" unless is_ip($ip);
- $ip =~ $ip_regexp;
- if ($1 >= 1 && $1 < 127) {
- return "255.0.0.0"; #-1.0.0.0 to 127.0.0.0
- } elsif ($1 >= 128 && $1 <= 191 ){
- return "255.255.0.0"; #-128.0.0.0 to 191.255.0.0
- } elsif ($1 >= 192 && $1 <= 223) {
- return "255.255.255.0";
- } else {
- return "255.255.255.255"; #-experimental classes
+ unless ($device) {
+ modules::load_thiskind('net') or return;
+ $device = detect_devices::getNet();
}
+ $device;
}
-sub masked_ip {
- my ($ip) = @_;
- return "" unless is_ip($ip);
- my @mask = netmask($ip) =~ $ip_regexp;
- my @ip = $ip =~ $ip_regexp;
- for (my $i = 0; $i < @ip; $i++) {
- $ip[$i] &= int $mask[$i];
- }
- join(".", @ip);
-}
-
-sub dns {
- my ($ip) = @_;
- my $mask = masked_ip($ip);
- my @masked = masked_ip($ip) =~ $ip_regexp;
- $masked[3] = 1;
- join (".", @masked);
-
-}
-sub gateway {
- my ($ip) = @_;
- my @masked = masked_ip($ip) =~ $ip_regexp;
- $masked[3] = 254;
- join (".", @masked);
-
-}
-
-#-######################################################################################
-#- Wonderful perl :(
-#-######################################################################################
-1;