Improved -i to show IF lan nic IP using as first choice the ip tool from iproute, and to only use the deprecated ifconfig as a fallback.

This required recoding that function, so I also made -i show IPv6 with -x as well. Might as well start getting used to it.

Also fixed and added wrapping for the -i output, that wasn't working right before, now is standardized to other lines.
This commit is contained in:
inxi-svn 2011-06-22 23:26:08 +00:00
parent 6408e0a56b
commit a6fd64fdae

186
inxi
View file

@ -1,8 +1,8 @@
#!/bin/bash #!/bin/bash
######################################################################## ########################################################################
#### Script Name: inxi #### Script Name: inxi
#### version: 1.7.7 #### version: 1.7.8
#### Date: June 21 2011 #### Date: June 22 2011
#### Patch Number: 01 #### Patch Number: 01
######################################################################## ########################################################################
#### SPECIAL THANKS #### SPECIAL THANKS
@ -71,7 +71,7 @@
#### Note: requires user action for this feature to run as user (edit /etc/sudoers file) #### Note: requires user action for this feature to run as user (edit /etc/sudoers file)
#### -G - full graphics output requires: glxinfo (mesa-utils); xdpyinfo (X11-utils); #### -G - full graphics output requires: glxinfo (mesa-utils); xdpyinfo (X11-utils);
#### xrandr (x11-xserver-utils) #### xrandr (x11-xserver-utils)
#### -i - IP information, local/wan - ifconfig (net-tools) #### -i - IP information, local/wan - ip (iproute) legacy, not used if ip present: ifconfig (net-tools)
#### -Ix - view current runlevel while not in X window system (or with -x): runlevel (sysvinit) #### -Ix - view current runlevel while not in X window system (or with -x): runlevel (sysvinit)
#### -o - for unmounted file system information in unmounted drives (root only default): file (file) #### -o - for unmounted file system information in unmounted drives (root only default): file (file)
#### Note: requires user action for this feature to run as user (edit /etc/sudoers file) #### Note: requires user action for this feature to run as user (edit /etc/sudoers file)
@ -513,9 +513,12 @@ main()
initialize_script_data initialize_script_data
# Check for dependencies BEFORE running ANYTHING else except above functions # Check for dependencies BEFORE running ANYTHING else except above functions
# Not all distro's have these depends installed by default # Not all distro's have these depends installed by default. Don't want to run
check_script_depends # this if the user is requesting to see this information in the first place
check_script_suggested_apps if [[ $1 != '--recommends' ]];then
check_script_depends
check_script_suggested_apps
fi
### Only continue if depends ok ### Only continue if depends ok
SCRIPT_PATH=$( dirname $0 ) SCRIPT_PATH=$( dirname $0 )
@ -1500,6 +1503,7 @@ check_recommends_items()
file:file~file~file~:-o_unmounted_file_system file:file~file~file~:-o_unmounted_file_system
hddtemp:hddtemp~hddtemp~hddtemp~:-Dx_show_hdd_temp hddtemp:hddtemp~hddtemp~hddtemp~:-Dx_show_hdd_temp
ifconfig:net-tools~net-tools~net-tools~:-i_ip_lan ifconfig:net-tools~net-tools~net-tools~:-i_ip_lan
ip:iproute~iproute2~iproute~:-i_ip_lan
sensors:lm-sensors~lm_sensors~lm-sensors~:-s_sensors_output sensors:lm-sensors~lm_sensors~lm-sensors~:-s_sensors_output
lsusb:usbutils~usbutils~usbutils~:-A_usb_audio;-N_usb_networking lsusb:usbutils~usbutils~usbutils~:-A_usb_audio;-N_usb_networking
modinfo:module-init-tools~module-init-tools~module-init-tools~:-Ax,-Nx_module_version modinfo:module-init-tools~module-init-tools~module-init-tools~:-Ax,-Nx_module_version
@ -2112,13 +2116,14 @@ show_options()
print_screen_output "-x Show extra data (only works with verbose or line output, not short form): " print_screen_output "-x Show extra data (only works with verbose or line output, not short form): "
print_screen_output " -C - bogomips on Cpu;" print_screen_output " -C - bogomips on Cpu;"
print_screen_output " -d - Adds items to features line of optical drive; adds rev version to optical drive." print_screen_output " -d - Adds items to features line of optical drive; adds rev version to optical drive."
print_screen_output " -D - Hdd temp with disk data if you have hddtemp installed, if you are root OR if you have added to"
print_screen_output " /etc/sudoers (sudo v. 1.7 or newer): <username> ALL = NOPASSWD: /usr/sbin/hddtemp (sample)"
print_screen_output " -G - Direct rendering status for Graphics (in X)."
print_screen_output " -G - (for single gpu, nvidia driver) screen number gpu is running on."
print_screen_output " -i - Show IPv6 as well for LAN interface (IF) devices."
print_screen_output " -N -A - Adds version/port(s)/driver version (if available) for Network/Audio;" print_screen_output " -N -A - Adds version/port(s)/driver version (if available) for Network/Audio;"
print_screen_output " -N -A -G - Network, audio, graphics, shows PCI Bus ID/Usb ID number of card;" print_screen_output " -N -A -G - Network, audio, graphics, shows PCI Bus ID/Usb ID number of card;"
print_screen_output " -S - Desktop toolkit if avaliable (GNOME/XFCE/KDE only); Kernel gcc version" print_screen_output " -S - Desktop toolkit if avaliable (GNOME/XFCE/KDE only); Kernel gcc version"
print_screen_output " -G - Direct rendering status for Graphics (in X)."
print_screen_output " -G - (for single gpu, nvidia driver) screen number gpu is running on."
print_screen_output " -D - Hdd temp with disk data if you have hddtemp installed, if you are root OR if you have added to"
print_screen_output " /etc/sudoers (sudo v. 1.7 or newer): <username> ALL = NOPASSWD: /usr/sbin/hddtemp (sample)"
print_screen_output " -t - Adds memory use output to cpu (-xt c), and cpu use to memory (-xt m)." print_screen_output " -t - Adds memory use output to cpu (-xt c), and cpu use to memory (-xt m)."
print_screen_output "-xx Show extra, extra data (only works with verbose or line output, not short form): " print_screen_output "-xx Show extra, extra data (only works with verbose or line output, not short form): "
print_screen_output " -M - Adds chassis information, if any data for that is available." print_screen_output " -M - Adds chassis information, if any data for that is available."
@ -4480,58 +4485,108 @@ get_networking_local_ip_data()
{ {
eval $LOGFS eval $LOGFS
local ifconfig_path=$( type -p ifconfig ) local ip_tool_command=$( type -p ip )
local temp_array='' local temp_array='' ip_tool='ip'
# the chances for all new systems to have ip by default are far higher than
# lack of ifconfig will throw an error only upon it's usage # the deprecated ifconfig. Only try for ifconfig if ip is not present in system
if [[ -n $ifconfig_path ]];then if [[ -z $ip_tool_command ]];then
IFS=$'\n' ip_tool_command=$( type -p ifconfig )
A_INTERFACES_DATA=( $( $ifconfig_path | gawk ' ip_tool='ifconfig'
else
ip_tool_command="$ip_tool_command addr"
fi
# lack of ip tool will throw an error only upon it's usage
if [[ -n "$ip_tool_command" ]];then
IFS=$'\n' # $ip_tool_command
A_INTERFACES_DATA=( $(
# important, because this can be 'ip addr' it MUST use eval ${...}
eval ${ip_tool_command} | gawk -v ipTool=$ip_tool '
BEGIN { BEGIN {
IGNORECASE=1 IGNORECASE=1
interface=""
ifIp=""
ifIpV6=""
ifMask=""
} }
$0 !~ /^lo/ { # skip past the lo item
# not clear on why inet is coming through, but this gets rid of it /^lo/ || /^[0-9]+: lo:/ {
# as first line item. while (getline && ( !/^$/ && !/valid(.*)lft/ ) ) {
interface = $1 # do nothing, just get past this entry item
gsub(/,/, " ", interface)
gsub(/^ +| +$/, "", interface)
gsub(/ [ \t]+/, " ", interface)
aInterfaces[interface]++
while (getline && !/^$/) {
if (/inet addr:/) {
ipAddresses[interface] = gensub( /addr:([0-9\.]+)/, "\\1", "g", $2 )
}
} }
} }
/^[a-zA-Z]+[0-9]/ || /^[0-9]+: [a-zA-Z]+[0-9]+:/ {
# not clear on why inet is coming through, but this gets rid of it
# as first line item.
gsub(/,/, " ", $0)
gsub(/^ +| +$/, "", $0)
gsub(/ [ \t]+/, " ", $0)
if ( ipTool == "ifconfig" ) {
interface = $1
}
# prep this this: 2: eth0:
else if ( ipTool == "ip" ) {
interface = $2
sub(/:/, "", interface)
}
ifIp=""
ifIpV6=""
ifMask=""
aInterfaces[interface]++
while (getline && ( !/^$/ && !/valid(.*)lft/ )) {
if ( ipTool == "ifconfig" ) {
if (/inet addr:/) {
ifIp = gensub( /addr:([0-9\.]+)/, "\\1", "g", $2 )
if (/mask:/) {
ifMask = gensub( /mask:([0-9\.]+)/, "\\1", "g", $NF )
}
}
if (/inet6 addr:/) {
ifIpV6 = $3
}
}
else if ( ipTool == "ip" ) {
if ( $1 == "inet" ) {
ifIp = $2
}
if ( $1 == "inet6" ) {
ifIpV6 = $2
}
}
}
# slice off the digits that are sometimes tacked to the end of the address,
# like: /64 or /24
sub(/\/[0-9]+/, "", ifIp)
sub(/\/[0-9]+/, "", ifIpV6)
ipAddresses[interface] = ifIp "," ifMask "," ifIpV6
}
END { END {
j=0 j=0
for (i in aInterfaces) { for (i in aInterfaces) {
useInterfaceIp = "" ifData = ""
a[j] = i a[j] = i
if (ipAddresses[i] != "") { if (ipAddresses[i] != "") {
useInterfaceIp = ipAddresses[i] ifData = ipAddresses[i]
} }
# create array primary item for master array # create array primary item for master array
# tested needed to avoid bad data from above, if null it is garbage # tested needed to avoid bad data from above, if null it is garbage
# this is the easiest way to handle junk I found, improve if you want # this is the easiest way to handle junk I found, improve if you want
if ( useInterfaceIp != "" ) { if ( ifData != "" ) {
print a[j] "," useInterfaceIp print a[j] "," ifData
} }
j++ j++
} }
}') ) }'
) )
IFS="$ORIGINAL_IFS" IFS="$ORIGINAL_IFS"
else else
A_INTERFACES_DATA=( "Interfaces tool requires missing app: ifconfig" ) A_INTERFACES_DATA=( "Interfaces program 'ip' missing. Please check: $SCRIPT_NAME --recommends" )
fi fi
temp_array=${A_INTERFACES_DATA[@]} temp_array=${A_INTERFACES_DATA[@]}
log_function_data "A_INTERFACES_DATA: $temp_array" log_function_data "A_INTERFACES_DATA: $temp_array"
eval $LOGFE eval $LOGFE
} }
# get_networking_local_ip_data;exit
get_optical_drive_data() get_optical_drive_data()
{ {
eval $LOGFS eval $LOGFS
@ -6706,7 +6761,7 @@ print_networking_data()
fi fi
card_string="${C1}Card$card_id${C2} ${a_network_working[0]} " card_string="${C1}Card$card_id${C2} ${a_network_working[0]} "
card_data="$driver_data$port_data$pci_bus_id" card_data="$driver_data$port_data$pci_bus_id"
if [[ $( calculate_line_length "$card_string$card_data" ) -gt $LINE_MAX ]];then if [[ $( calculate_line_length "$card_string$card_data" ) -lt $LINE_MAX ]];then
network_data=$( create_print_line "$line_starter" "$card_string" ) network_data=$( create_print_line "$line_starter" "$card_string" )
line_starter=' ' line_starter=' '
card_string='' card_string=''
@ -6776,8 +6831,10 @@ print_networking_ip_data()
{ {
eval $LOGFS eval $LOGFS
local ip=$( get_networking_wan_ip_data ) local ip=$( get_networking_wan_ip_data )
local ip_data='' a_interfaces_working='' interfaces='' interfaces_2='' i='' local wan_ip_data='' a_interfaces_working='' interfaces='' i=''
local if_id='' if_ip='' local if_id='' if_ip='' if_ipv6='' if_ipv6_string='' full_string='' if_string=''
local if_id_string='' if_ip_string=''
local line_max=$(( $LINE_MAX - 50 ))
# set A_INTERFACES_DATA # set A_INTERFACES_DATA
get_networking_local_ip_data get_networking_local_ip_data
@ -6789,8 +6846,7 @@ print_networking_ip_data()
ip=$FILTER_STRING ip=$FILTER_STRING
fi fi
fi fi
ip_data=$( create_print_line " " "${C1}Wan IP:${C2} $ip" ) wan_ip_data="${C1}WAN IP:${C2} $ip "
# then create the list of local interface/ip # then create the list of local interface/ip
i=0 ## loop starts with 1 by auto-increment so it only shows cards > 1 i=0 ## loop starts with 1 by auto-increment so it only shows cards > 1
while [[ -n ${A_INTERFACES_DATA[i]} ]] while [[ -n ${A_INTERFACES_DATA[i]} ]]
@ -6800,29 +6856,45 @@ print_networking_ip_data()
IFS="$ORIGINAL_IFS" IFS="$ORIGINAL_IFS"
if_id='N/A' if_id='N/A'
if_ip='N/A' if_ip='N/A'
if [[ -n ${a_interfaces_working[1]} ]];then if_ipv6='N/A'
if [[ $B_OUTPUT_FILTER == 'true' ]];then if_ipv6_string=''
if_ip=$FILTER_STRING if [[ -z $( grep '^Interface' <<< ${a_interfaces_working[0]} ) ]];then
else if [[ -n ${a_interfaces_working[1]} ]];then
if_ip=${a_interfaces_working[1]} if [[ $B_OUTPUT_FILTER == 'true' ]];then
if_ip=$FILTER_STRING
else
if_ip=${a_interfaces_working[1]}
fi
fi
if_ip_string=" ${C1}ip${C2} $if_ip"
if [[ $B_EXTRA_DATA == 'true' ]];then
if [[ -n ${a_interfaces_working[3]} ]];then
if [[ $B_OUTPUT_FILTER == 'true' ]];then
if_ipv6=$FILTER_STRING
else
if_ipv6=${a_interfaces_working[3]}
fi
fi
if_ipv6_string=" ${C1}ip-v6${C2} $if_ipv6"
fi fi
fi fi
if [[ -n ${a_interfaces_working[0]} ]];then if [[ -n ${a_interfaces_working[0]} ]];then
if_id=${a_interfaces_working[0]} if_id=${a_interfaces_working[0]}
fi fi
if [[ $i -lt 3 ]];then if_string="$wan_ip_data$if_string${C1}IF${C2} $if_id$if_ip_string$if_ipv6_string "
interfaces="$interfaces ${C1}IF IP:${C2} $if_id ${C1}-${C2} $if_ip" wan_ip_data=''
else if [[ $( calculate_line_length "$if_string" ) -gt $line_max ]];then
# space on end here for lining up with line starter full_string=$( create_print_line " " "$if_string" )
interfaces_2="$interfaces_2${C1}IF IP:${C2} $if_id ${C1}-${C2} $if_ip " print_screen_output "$full_string"
if_string=''
fi fi
((i++)) ((i++))
done done
print_screen_output "$ip_data$interfaces"
# then wrap it if needed # then print out anything not printed already
if [[ -n $interfaces_2 ]];then if [[ -n $if_string ]];then
interfaces_2=$( create_print_line " " "$interfaces_2" ) full_string=$( create_print_line " " "$if_string" )
print_screen_output "$interfaces_2" print_screen_output "$full_string"
fi fi
eval $LOGFE eval $LOGFE
} }