1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
package network;
use diagnostics;
use strict;
use Socket;
use common qw(:common :file :system);
use detect_devices;
use modules;
use log;
1;
sub read_conf {
my ($file) = @_;
my %netc = getVarsFromSh($file);
\%netc;
}
sub read_interface_conf {
my ($file) = @_;
my %intf = getVarsFromSh($file) or die "cannot open file $file: $!";
$intf{BOOTPROTO} ||= 'static';
$intf{isPtp} = $intf{NETWORK} eq '255.255.255.255';
$intf{isUp} = 1;
\%intf;
}
sub write_conf {
my ($file, $netc) = @_;
add2hash($netc, {
NETWORKING => "yes",
FORWARD_IPV4 => "false",
HOSTNAME => "localhost.localdomain",
DOMAINNAME => "localdomain",
});
setVarsInSh($file, $netc, qw(NETWORKING FORWARD_IPV4 HOSTNAME DOMAINNAME GATEWAY GATEWAYDEV));
}
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} || $netc->{dnsServers}) {
unlink($file);
log::l("neither domain name nor dns server are configured");
return 0;
}
my @l = cat_($file);
local *F;
open F, "> $file" or die "cannot write $file: $!";
print F "search $netc->{DOMAINNAME}\n" if $netc->{DOMAINNAME};
print F "nameserver $_\n" foreach @{$netc->{dnsServers}};
print F "#$_" foreach @l;
#res_init(); # reinit the resolver so DNS changes take affect
1;
}
sub write_interface_conf {
my ($file, $intf) = @_;
add2hash($intf, { ONBOOT => "yes" });
setVarsInSh($file, $intf, qw(DEVICE BOOTPROTO IPADDR NETMASK NETWORK BROADCAST ONBOOT));
}
# The interface/gateway needs to be configured before this will work!
sub guessHostname {
my ($prefix, $netc, $intf) = @_;
$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, DOMAINNAME => $name =~ /\.(.*)/ });
1;
}
sub addDefaultRoute {
my ($netc) = @_;
c::addDefaultRoute($netc->{gateway}) if $netc->{gateway} || !$::testing;
}
sub getAvailableNetDevice {
my $device = detect_devices::getNet();
unless ($device) {
modules::load_thiskind('net') or return;
$device = detect_devices::getNet();
}
$device;
}
|