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]++
while (getline && !/^$/ ) {
addIpV6 = ""
if ( ipTool == "ifconfig" ) {
if (/inet addr:/) {
ifIp = gensub( /addr:([0-9\.]+)/, "\\1", "g", $2 )
@ -8127,7 +8128,7 @@ get_networking_local_ip_data()
}
}
if (/inet6 addr:/) {
ifIpV6 = $3
addIpV6 = $3
}
if ( bsdType == "bsd" ) {
if ( $1 == "inet" ) {
@ -8138,7 +8139,7 @@ get_networking_local_ip_data()
}
if ( $0 ~ /inet6.*%/ ) {
sub(/%.*/,"",$2)
ifIpV6 = $2
addIpV6 = $2
}
}
}
@ -8146,15 +8147,24 @@ get_networking_local_ip_data()
if ( $1 == "inet" ) {
ifIp = $2
}
if ( $1 == "inet6" ) {
ifIpV6 = $2
if ( $1 == "inet6" && $0 !~ / temporary/) { # filter out IPv6 privacy addresses
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,
# like: /64 or /24
sub(/\/[0-9]+/, "", ifIp)
sub(/\/[0-9]+/, "", ifIpV6)
gsub(/\/[0-9]+/, "", ifIpV6)
ipAddresses[interface] = ifIp "," ifMask "," ifIpV6
}
END {
@ -13515,6 +13525,7 @@ print_network_advanced_data()
print_networking_ip_data()
{
eval $LOGFS
# $ip should be IPv4
local ip=$( get_networking_wan_ip_data )
local wan_ip_data='' a_interfaces_working='' interfaces='' i=0
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_ipv6=$FILTER_STRING
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
if_ipv6_string=" ${C1}ip-v6$SEP3${C2} $if_ipv6"