]>
Tony Duckles's Git Repositories (git.nynim.org) - dotfiles.git/blob - bin/ipaddr
2 # Usage: ipaddr [<iface>]
3 # Show the IP address (IPv4 and/or IPv6) for interface <iface> or all interfaces
4 # when no <iface> given.
10 # Helper function for converting a hex (or decimal) netmask into CIDR format
12 function mask2cdr(mask) {
13 if(mask ~ /[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/) {
15 mask = sprintf("0x%x%x%x%x",d[1],d[2],d[3],d[4]);
20 digit=substr(mask,1,1);
22 if(digit ~ /f|F/) cidr += 4;
23 if(digit ~ /e|E/) cidr += 3;
24 if(digit ~ /c|C/) cidr += 2;
25 if(digit ~ /8/) cidr += 1;
32 test -n "$IFACE" && if_args
="$IFACE"
33 test -z "$if_args" && if_args
="-a"
34 ifconfig
$if_args | $awk "$awk_mask2cdr"'
35 /^[a-z-0-9]/ {iface=$1};
36 $1 == "inet" {printf("%-10s %s/%s\n",iface,$2,mask2cdr($4))};
37 $1 == "inet6" && !/scopeid|inet6 ::1|temporary/ {printf("%-10s %s/%s\n",iface,$2,$4)}'
40 test -n "$IFACE" && if_args
="$IFACE"
41 test -z "$if_args" && if_args
="-a"
42 ifconfig
$if_args | $awk "$awk_mask2cdr"'
44 $1 == "inet" { printf("%-10s %s/%s\n", iface ":", substr($2,6), mask2cdr(substr($0,index($0,"Mask:")+5))) };
45 $1 == "inet6" && /Scope:Global/ { printf("%-10s %s\n", iface ":", $3) }'
48 test -x "/usr/gnu/bin/awk" && awk=/usr
/gnu
/bin
/awk
49 test -n "$IFACE" && if_args
="$IFACE"
50 test -z "$if_args" && if_args
="-a"
51 ifconfig
$if_args | $awk "$awk_mask2cdr"'
52 /^[a-z0-9]+/ {iface=$1};
53 $1 == "inet" { printf("%-10s %s/%s\n", iface, $2, mask2cdr($4)) };
54 $1 == "inet6" && !/inet6 ::|inet6 fe80:/ { printf("%-10s %s\n", iface, $2) }'
57 echo "Unhandled host-type: $UNAME"