Changeset 2969 in MondoRescue for branches/3.0/mindi/mr-net-find
- Timestamp:
- Mar 17, 2012, 4:10:22 AM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/3.0/mindi/mr-net-find
r2968 r2969 116 116 117 117 my $curdev = ""; 118 open(IP,"ip addr |") || die "Unable to read IP config\n"; 119 while(<IP>) { 120 # Remove duplicate spaces 121 $_ =~ s/\s+/ /g; 122 pb_log(2,"Line: $_\n"); 123 # Check for a new interface 124 my $tmp; 125 if (/^[0-9]+:/) { 126 my $dev; 127 my $rank; 128 ($rank,$dev,$tmp) = split(/:/); 129 pb_log(3,"$rank,$dev,$tmp"); 130 $dev =~ s/\s*//; 131 $if->{$dev}->{'if'} = $dev; 132 $curdev = $dev; 133 } 134 ($tmp,$tmp,$if->{$curdev}->{'mac'},$tmp) = split(/ /) if (/^ link/); 135 ($tmp,$tmp,$if->{$curdev}->{'cidr'},$tmp) = split(/ /) if (/^ inet/); 136 } 137 close(IP); 118 # TODO: Check whther the ip command is available ! 119 # If not consider using ifconfig for compatibility or non Linux availability 120 my $ipcmd = pb_check_req("ip",1); 121 if (defined $ipcmd) { 122 open(IP,"$ipcmd addr |") || die "Unable to read IP config with $ipcmd addr\n"; 123 while (<IP>) { 124 # Remove duplicate spaces 125 my $line = $_; 126 $line =~ s/\s+/ /g; 127 pb_log(2,"Line: $line\n"); 128 # Check for a new interface 129 my $tmp; 130 if ($line =~ /^[0-9]+:/) { 131 my $dev; 132 my $rank; 133 ($rank,$dev,$tmp) = split(/:/,$line); 134 pb_log(3,"$rank,$dev,$tmp\n"); 135 $dev =~ s/\s*//; 136 $if->{$dev}->{'if'} = $dev; 137 $curdev = $dev; 138 } 139 ($tmp,$tmp,$if->{$curdev}->{'mac'},$tmp) = split(/ /,$line) if (/^\s*link/); 140 ($tmp,$tmp,$if->{$curdev}->{'cidr'},$tmp) = split(/ /,$line) if (/^\s*inet/); 141 } 142 close(IP); 143 } else { 144 my $ipcmd = pb_check_req("ifconfig",1); 145 if (defined $ipcmd) { 146 open(IP,"$ipcmd -a |") || die "Unable to read IP config with $ipcmd -a\n"; 147 while (<IP>) { 148 # Remove duplicate spaces 149 my $line = $_; 150 $line =~ s/\s+/ /g; 151 pb_log(2,"Line: $line\n"); 152 # Check for a new interface 153 my $tmp; 154 my $tmp2; 155 if ($line =~ /^[^ ]+ /) { 156 my $dev; 157 ($dev,$tmp) = split(/ /,$line,2); 158 pb_log(3,"DEV: $dev,$tmp\n"); 159 $dev =~ s/\s*//; 160 $if->{$dev}->{'if'} = $dev; 161 $curdev = $dev; 162 ($tmp2,$tmp2,$tmp2,$if->{$curdev}->{'mac'}) = split(/ /,$tmp); 163 } 164 if (/^\s*inet/) { 165 ($tmp,$if->{$curdev}->{'ip'},$if->{$curdev}->{'nm'},$tmp) = split(/:/,$line); 166 $if->{$curdev}->{'ip'} =~ s/ .*$// if (defined $if->{$curdev}->{'ip'}); 167 $if->{$curdev}->{'nm'} =~ s/ .*$// if (defined $if->{$curdev}->{'nm'}); 168 pb_log(3,"IP: $if->{$curdev}->{'ip'},$if->{$curdev}->{'nm'}\n"); 169 $if->{$curdev}->{'cidr'} = $if->{$curdev}->{'ip'}."/".mr_net_cvt_mask_bits($if->{$curdev}->{'nm'}) if ((defined $if->{$curdev}->{'ip'}) && (defined $if->{$curdev}->{'nm'})); 170 } 171 } 172 close(IP); 173 } else { 174 die "Neither ip nor ifconfig are available to get IP configuration.\nPlease report upstream how to deal with your platform.\n"; 175 } 176 } 138 177 139 178 # Ideas Taken from http://nixcraft.com/shell-scripting/11398-simple-ipcalc-perl-script.html 140 179 foreach my $dev (keys %if) { 141 180 next if (not defined $if->{$dev}->{'cidr'}); 142 ($if->{$dev}->{'ip'},my $cidr) = split(/\//,$if->{$dev}->{'cidr'}) ;143 144 $if->{$dev}->{'nm'} = mr_net_cvt_bits_mask($cidr) ;181 ($if->{$dev}->{'ip'},my $cidr) = split(/\//,$if->{$dev}->{'cidr'}) if (not defined $if->{$dev}->{'ip'}); 182 183 $if->{$dev}->{'nm'} = mr_net_cvt_bits_mask($cidr) if (not defined $if->{$dev}->{'nm'});; 145 184 146 185 ($if->{$dev}->{'net'},$if->{$dev}->{'bcast'}) = mr_net_nbcast_from_in($if->{$dev}->{'ip'},$if->{$dev}->{'nm'}); … … 162 201 163 202 if ($bits <= 8 ) { 164 $a = bits_to_dec($bits);203 $a = mr_net_bits_to_dec($bits); 165 204 } else { 166 205 $a = 255; 167 206 if ($bits <= 16 ) { 168 $b = bits_to_dec($bits-8);207 $b = mr_net_bits_to_dec($bits-8); 169 208 } else { 170 209 $b=255; 171 210 if ($bits <= 24 ) { 172 $c = bits_to_dec($bits-16);211 $c = mr_net_bits_to_dec($bits-16); 173 212 } else { 174 213 $c=255; 175 214 if ($bits <= 32 ) { 176 $d = bits_to_dec($bits-24);215 $d = mr_net_bits_to_dec($bits-24); 177 216 } else { 178 217 die "invalid bit count\n"; … … 183 222 return ($a.".".$b.".".$c.".".$d); 184 223 } 185 186 sub bits_to_dec { 224 225 sub mr_net_cvt_mask_bits { 226 227 my ($mask) = @_; 228 my ($a,$b,$c,$d) = split(/\./,$mask); 229 my $bits =0; 230 231 $bits= mr_net_dec_to_bits($a) + mr_net_dec_to_bits($b) + mr_net_dec_to_bits($c) + mr_net_dec_to_bits($d); 232 return ($bits); 233 } 234 235 sub mr_net_bits_to_dec { 187 236 my ($bits) = @_; 188 237 … … 198 247 } 199 248 249 sub mr_net_dec_to_bits { 250 my ($dec) = @_; 251 252 if ($dec == 0 ) { return 0; } 253 if ($dec == 128 ) { return 1; } 254 if ($dec == 192 ) { return 2; } 255 if ($dec == 224 ) { return 3; } 256 if ($dec == 240 ) { return 4; } 257 if ($dec == 248 ) { return 5; } 258 if ($dec == 252 ) { return 6; } 259 if ($dec == 254 ) { return 7; } 260 if ($dec == 255 ) { return 8; } 261 } 262 200 263 # Get Net and Broadcast from IP and Netmask 201 264 sub mr_net_nbcast_from_in {
Note:
See TracChangeset
for help on using the changeset viewer.