Browse Source

add interface netmask and network

master
Georg Hopp 12 years ago
parent
commit
d591675eb6
  1. 67
      gatherer/interface_information.sh
  2. 2
      run.sh

67
gatherer/interface_information.sh

@ -36,7 +36,7 @@ gather_interface_info() {
gather_if_info_ip() {
eval $(${IP} -o link | ${AWK} '{
sub(/:/,"",$1);
no=$1;
ifno=$1;
sub(/:/,"",$2);
name=$2;
classes=classes "net_iface_" name " ";
@ -50,35 +50,82 @@ gather_if_info_ip() {
}
}
print "IF" no "_NAME=" name ";IF" no "_STATE=" state ";IF" no "_MAC=" mac ";";
if ("UP" == state) classes=classes mac " "
if ("UP" == state) classes=classes mac " ";
if_numbers=if_numbers " " ifno;
no+=1
}
BEGIN {
classes=""
classes="";
no=1;
if_numbers=""
}
END {
print "set_class " classes ";";
print "NINTERFACES=" FNR ";"
sub(/^ */,"",if_numbers);
sub(/ *$/,"",if_numbers);
print "IF_NUMBERS=\"" if_numbers "\";";
}')
eval $(${IP} -o addr | ${AWK} '{
echo "DEBUG: ${IF_NO}"
eval $(${IP} -o addr | ${AWK} -v if_numbers="${IF_NUMBERS}" '{
sub(/:/,"",$1);
no=$1;
if_no=$1;
no=r_if_numbers[if_no];
if ($3 == "inet") {
sub(/[\/%].*/,"",$4);
print "IF" no "_IPV4=\"${IF" no "_IPV4}" $4 " \";";
split($4,addr,/[\/]/);
print "IF" no "_IPV4=\"${IF" no "_IPV4}" addr[1] " \";";
network(no, addr[1], addr[2]);
classes=classes $4 " "
}
if ($3 == "inet6") {
sub(/[\/%].*/,"",$4);
print "IF" no "_IPV6=\"${IF" no "_IPV6}" $4 " \";";
split($4,addr,/[\/]/);
print "IF" no "_IPV6=\"${IF" no "_IPV6}" addr[1] " \";";
classes=classes $4 " "
}
}
BEGIN {
classes=""
classes="";
sub(/^ */,"",if_numbers);
sub(/ *$/,"",if_numbers);
split(if_numbers,tmp_array,/ /)
for(no in tmp_array) {
if_no=tmp_array[no];
r_if_numbers[if_no]=no;
}
}
END {
print "set_class " classes ";"
}
function network(no, addr, cidr) {
mask="";
net="";
full_octets=cidr/8;
part_octets=cidr%8;
split(addr,parts,/\./);
for(i=1; i<5; i++) {
if(i-1 < full_octets) {
mask=mask "255";
net=net parts[i];
} else {
if (i-1 == full_octets) {
mpart=256-lshift(1, 8-part_octets);
mask=mask mpart;
net=net and(parts[i],mpart);
} else {
mask=mask "0";
net=net "0";
}
}
if (i < 4) {
mask=mask ".";
net=net ".";
}
}
classes=classes " " net;
print "IF" no "_NETWORK=\"" net "\"; export " name "_NETWORK;";
print "IF" no "_MASK=\"" mask "\"; export " name "_MASK;";
}')
}

2
run.sh

@ -40,6 +40,8 @@ do
eval printf \"%15s : %s\\\n\" \"IF${NO}_STATE\" \"\${IF${NO}_STATE}\"
eval printf \"%15s : %s\\\n\" \"IF${NO}_IPV4\" \"\${IF${NO}_IPV4}\"
eval printf \"%15s : %s\\\n\" \"IF${NO}_IPV6\" \"\${IF${NO}_IPV6}\"
eval printf \"%15s : %s\\\n\" \"IF${NO}_MASK\" \"\${IF${NO}_MASK}\"
eval printf \"%15s : %s\\\n\" \"IF${NO}_NETWORK\" \"\${IF${NO}_NETWORK}\"
NO=$((NO+1))
done

Loading…
Cancel
Save