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
|
package network::ethernet; # $Id$
use c;
use network::network;
use modules;
use modules::interactive;
use detect_devices;
use common;
use run_program;
use network::tools;
use vars qw(@ISA @EXPORT);
use MDK::Common::Globals "network", qw($in);
@ISA = qw(Exporter);
@EXPORT = qw(conf_network_card_backend);
# FIXME: unused code to merge in into wizard
sub ether_conf {
my ($in, $netcnx, $netc, $intf) = @_;
configureNetwork2($in, $::prefix, $netc, $intf);
$netc->{NETWORKING} = "yes";
if ($netc->{GATEWAY} || any { $_->{BOOTPROTO} =~ /dhcp/ } values %$intf) {
$netcnx->{type} = 'lan';
$netcnx->{NET_DEVICE} = $netc->{NET_DEVICE} = '';
$netcnx->{NET_INTERFACE} = 'lan'; #$netc->{NET_INTERFACE};
write_cnx_script($netc, "local network",
qq(
/etc/rc.d/init.d/network restart
),
qq(
/etc/rc.d/init.d/network stop
/sbin/ifup lo
), $netcnx->{type});
}
$::isStandalone and modules::write_conf();
1;
}
sub mapIntfToDevice {
my ($interface) = @_;
my ($bus, $slot, $_func) = map { hex($_) } (c::getHwIDs("eth0") =~ /([0-9a-f])+:([0-9a-f])+\.([0-9a-f]+)/);
grep { $_->{pci_bus} == $bus && $_->{pci_device} == $slot } detect_devices::probeall();
}
# return list of [ intf_name, module, device_description ] tuples such as:
# [ "eth0", "3c59x", "3Com Corporation|3c905C-TX [Fast Etherlink]" ]
sub get_eth_cards() {
my @all_cards = detect_devices::getNet();
my @devs = detect_devices::pcmcia_probe();
modules::mergein_conf("$::prefix/etc/modules.conf");
my $saved_driver;
return map {
my $interface = $_;
my $a = c::getNetDriver($interface) || modules::get_alias($interface);
my $b = find { $_->{device} eq $interface } @devs;
$a ||= $b->{driver};
$a and $saved_driver = $a; # handle multiple cards managed by the same driver
[ $interface, $saved_driver, (mapIntfToDevice($interface))[0]->{description} ]
} @all_cards;
}
#- conf_network_card_backend : configure the network cards and return the list of them, or configure one specified interface : WARNING, you have to setup the ethernet cards, by calling load_category($in, 'network/main|gigabit|usb', !$::expert, 1) or load_category_backend before calling this function. Basically, you call this function in 2 times.
#- input
#- $prefix
#- $netc
#- $intf
#- $type : type of interface, must be given if $interface is : string : "static" or "dhcp"
#- $interface : facultative, if given, set this interface and return it in a proper form. If not, return @all_cards
#- $ipadr : facultative, ip address of the interface : string
#- $netadr : facultative, netaddress of the interface : string
#- when $interface is given, informations are written in $intf and $netc. If not, @all_cards is returned.
#- $intf output: $device is the result of
#- $intf->{$device}->{DEVICE} : which device is concerned : $device is the result of $interface =~ /(eth[0-9]+)/; my $device = $1;;
#- $intf->{$device}->{BOOTPROTO} : $type
#- $intf->{$device}->{NETMASK} : '255.255.255.0'
#- $intf->{$device}->{NETWORK} : $netadr
#- $intf->{$device}->{ONBOOT} : "yes"
#- $netc output:
#- $netc->{NET_DEVICE} : this is used to indicate that this eth card is used to connect to internet : $device
#- output:
#- $all_cards : a list of a list ( [eth1, module1], ... , [ethn, modulen]). Pass the ethx as $interface in further call.
#- $device : only returned in case $interface was given it's $interface, but filtered by /eth[0-9+]/ : string : /eth[0-9+]/
sub conf_network_card_backend {
my ($netc, $intf, $o_type, $o_interface, $o_ipadr, $o_netadr) = @_;
#-type =static or dhcp
return get_eth_cards() if !$o_interface;
$o_interface =~ /eth[0-9]+/ or die("the interface is not an ethx");
$netc->{NET_DEVICE} = $o_interface; #- one consider that there is only ONE Internet connection device..
@{$intf->{$o_interface}}{qw(DEVICE BOOTPROTO NETMASK NETWORK ONBOOT)} = ($o_interface, $o_type, '255.255.255.0', $o_netadr, 'yes');
$intf->{$o_interface}{IPADDR} = $o_ipadr if $o_ipadr;
$o_interface;
}
# automatic net aliases configuration
sub configure_eth_aliases() {
foreach (detect_devices::getNet()) {
my $driver = c::getNetDriver($_) or next;
modules::add_alias($_, $driver);
}
}
1;
|