Merge pull request #106 from dsalt/ipv6

Improve IPv6 handling to cope with multiple addresses. After reviewing issue 78 and the links in it, which I'm glad I added since they explain the stuff pretty well, I'm accepting this patch as is. I'm not positive about the temporary address being hidden, but it's easy enough to modify that in the future if it's an issue.
This commit is contained in:
smxi 2017-05-31 10:37:05 -07:00 committed by GitHub
commit d225596251

24
inxi
View file

@ -8119,6 +8119,7 @@ get_networking_local_ip_data()
aInterfaces[interface]++ aInterfaces[interface]++
while (getline && !/^$/ ) { while (getline && !/^$/ ) {
addIpV6 = ""
if ( ipTool == "ifconfig" ) { if ( ipTool == "ifconfig" ) {
if (/inet addr:/) { if (/inet addr:/) {
ifIp = gensub( /addr:([0-9\.]+)/, "\\1", "g", $2 ) ifIp = gensub( /addr:([0-9\.]+)/, "\\1", "g", $2 )
@ -8127,7 +8128,7 @@ get_networking_local_ip_data()
} }
} }
if (/inet6 addr:/) { if (/inet6 addr:/) {
ifIpV6 = $3 addIpV6 = $3
} }
if ( bsdType == "bsd" ) { if ( bsdType == "bsd" ) {
if ( $1 == "inet" ) { if ( $1 == "inet" ) {
@ -8138,7 +8139,7 @@ get_networking_local_ip_data()
} }
if ( $0 ~ /inet6.*%/ ) { if ( $0 ~ /inet6.*%/ ) {
sub(/%.*/,"",$2) sub(/%.*/,"",$2)
ifIpV6 = $2 addIpV6 = $2
} }
} }
} }
@ -8146,15 +8147,24 @@ get_networking_local_ip_data()
if ( $1 == "inet" ) { if ( $1 == "inet" ) {
ifIp = $2 ifIp = $2
} }
if ( $1 == "inet6" ) { if ( $1 == "inet6" && $0 !~ / temporary/) { # filter out IPv6 privacy addresses
ifIpV6 = $2 addIpV6 = $2
}
}
if ( addIpV6 != "" && addIpV6 !~ /^fe80:/ ) { # filter out IPv6 link-local
if ( ifIpV6 == "" ) {
ifIpV6 = addIpV6
}
else {
ifIpV6 = ifIpV6 "," addIpV6
} }
} }
} }
# slice off the digits that are sometimes tacked to the end of the address, # slice off the digits that are sometimes tacked to the end of the address,
# like: /64 or /24 # like: /64 or /24
sub(/\/[0-9]+/, "", ifIp) sub(/\/[0-9]+/, "", ifIp)
sub(/\/[0-9]+/, "", ifIpV6) gsub(/\/[0-9]+/, "", ifIpV6)
ipAddresses[interface] = ifIp "," ifMask "," ifIpV6 ipAddresses[interface] = ifIp "," ifMask "," ifIpV6
} }
END { END {
@ -13515,6 +13525,7 @@ print_network_advanced_data()
print_networking_ip_data() print_networking_ip_data()
{ {
eval $LOGFS eval $LOGFS
# $ip should be IPv4
local ip=$( get_networking_wan_ip_data ) local ip=$( get_networking_wan_ip_data )
local wan_ip_data='' a_interfaces_working='' interfaces='' i=0 local wan_ip_data='' a_interfaces_working='' interfaces='' i=0
local if_id='' if_ip='' if_ipv6='' if_ipv6_string='' full_string='' if_string='' local if_id='' if_ip='' if_ipv6='' if_ipv6_string='' full_string='' if_string=''
@ -13556,7 +13567,8 @@ print_networking_ip_data()
if [[ $B_OUTPUT_FILTER == 'true' ]];then if [[ $B_OUTPUT_FILTER == 'true' ]];then
if_ipv6=$FILTER_STRING if_ipv6=$FILTER_STRING
else else
if_ipv6=${a_interfaces_working[3]} # may be more than one address here; get them all as one string
if_ipv6=${a_interfaces_working[@]:3}
fi fi
fi fi
if_ipv6_string=" ${C1}ip-v6$SEP3${C2} $if_ipv6" if_ipv6_string=" ${C1}ip-v6$SEP3${C2} $if_ipv6"