#!/usr/bin/gawk -f # # # ipdata / ... # # print network interface configuration data for every network # specification. # function ipval(str, i, n, x, val) { if ((n = split(str, x, ".")) != 4) return (0); val = x[1]; for (i=2; i<=4; i++) val = lshift(val, 8) + x[i]; return (val); } function ipmask(str, val) { if (index(str, ".") == 0) { str = str + 0; if (str < 0 || str > 32) str = 32; val = (str == 0)? 0: lshift(compl(0), 32 - str); } else { val = ipval(str); if (val == 0) val = compl(0); } return (val); } function ipstr(val, i, str) { str = sprintf ("%d", and(val, 255)); for (i=2; i<=4; i++) { val = rshift(val, 8); str = sprintf ("%d", and(val, 255)) "." str; } return (str); } BEGIN { STDERR = "/dev/stderr"; argi = 1; while (argi < ARGC) { iparg = ARGV[argi]; ARGV[argi++] = ""; if (index(iparg, "/") == 0) iparg = iparg "/" 32; k = index(iparg, "/"); ip = ipval(substr(iparg, 1, k-1)); mask = ipmask(substr(iparg, k+1)); first = and(ip, mask); last = or(ip, compl(mask)); printf ("%s %s %s %s %s\n", iparg, ipstr(ip), ipstr(first), ipstr(last), ipstr(mask)); } exit (0); }