Showing
2 changed files
with
70 additions
and
21 deletions
| ... | ... | @@ -36,7 +36,7 @@ gather_interface_info() { |
| 36 | 36 | gather_if_info_ip() { |
| 37 | 37 | eval $(${IP} -o link | ${AWK} '{ |
| 38 | 38 | sub(/:/,"",$1); |
| 39 | - no=$1; | |
| 39 | + ifno=$1; | |
| 40 | 40 | sub(/:/,"",$2); |
| 41 | 41 | name=$2; |
| 42 | 42 | classes=classes "net_iface_" name " "; |
| ... | ... | @@ -50,35 +50,82 @@ gather_if_info_ip() { |
| 50 | 50 | } |
| 51 | 51 | } |
| 52 | 52 | print "IF" no "_NAME=" name ";IF" no "_STATE=" state ";IF" no "_MAC=" mac ";"; |
| 53 | - if ("UP" == state) classes=classes mac " " | |
| 53 | + if ("UP" == state) classes=classes mac " "; | |
| 54 | + if_numbers=if_numbers " " ifno; | |
| 55 | + no+=1 | |
| 54 | 56 | } |
| 55 | 57 | BEGIN { |
| 56 | - classes="" | |
| 58 | + classes=""; | |
| 59 | + no=1; | |
| 60 | + if_numbers="" | |
| 57 | 61 | } |
| 58 | 62 | END { |
| 59 | 63 | print "set_class " classes ";"; |
| 60 | 64 | print "NINTERFACES=" FNR ";" |
| 65 | + sub(/^ */,"",if_numbers); | |
| 66 | + sub(/ *$/,"",if_numbers); | |
| 67 | + print "IF_NUMBERS=\"" if_numbers "\";"; | |
| 61 | 68 | }') |
| 62 | 69 | |
| 63 | - eval $(${IP} -o addr | ${AWK} '{ | |
| 64 | - sub(/:/,"",$1); | |
| 65 | - no=$1; | |
| 66 | - if ($3 == "inet") { | |
| 67 | - sub(/[\/%].*/,"",$4); | |
| 68 | - print "IF" no "_IPV4=\"${IF" no "_IPV4}" $4 " \";"; | |
| 69 | - classes=classes $4 " " | |
| 70 | - } | |
| 71 | - if ($3 == "inet6") { | |
| 72 | - sub(/[\/%].*/,"",$4); | |
| 73 | - print "IF" no "_IPV6=\"${IF" no "_IPV6}" $4 " \";"; | |
| 74 | - classes=classes $4 " " | |
| 70 | + echo "DEBUG: ${IF_NO}" | |
| 71 | + | |
| 72 | + eval $(${IP} -o addr | ${AWK} -v if_numbers="${IF_NUMBERS}" '{ | |
| 73 | + sub(/:/,"",$1); | |
| 74 | + if_no=$1; | |
| 75 | + no=r_if_numbers[if_no]; | |
| 76 | + if ($3 == "inet") { | |
| 77 | + split($4,addr,/[\/]/); | |
| 78 | + print "IF" no "_IPV4=\"${IF" no "_IPV4}" addr[1] " \";"; | |
| 79 | + network(no, addr[1], addr[2]); | |
| 80 | + classes=classes $4 " " | |
| 81 | + } | |
| 82 | + if ($3 == "inet6") { | |
| 83 | + split($4,addr,/[\/]/); | |
| 84 | + print "IF" no "_IPV6=\"${IF" no "_IPV6}" addr[1] " \";"; | |
| 85 | + classes=classes $4 " " | |
| 86 | + } | |
| 87 | + } | |
| 88 | + BEGIN { | |
| 89 | + classes=""; | |
| 90 | + sub(/^ */,"",if_numbers); | |
| 91 | + sub(/ *$/,"",if_numbers); | |
| 92 | + split(if_numbers,tmp_array,/ /) | |
| 93 | + for(no in tmp_array) { | |
| 94 | + if_no=tmp_array[no]; | |
| 95 | + r_if_numbers[if_no]=no; | |
| 75 | 96 | } |
| 76 | - } | |
| 77 | - BEGIN { | |
| 78 | - classes="" | |
| 79 | - } | |
| 80 | - END { | |
| 81 | - print "set_class " classes ";" | |
| 97 | + } | |
| 98 | + END { | |
| 99 | + print "set_class " classes ";" | |
| 100 | + } | |
| 101 | + function network(no, addr, cidr) { | |
| 102 | + mask=""; | |
| 103 | + net=""; | |
| 104 | + full_octets=cidr/8; | |
| 105 | + part_octets=cidr%8; | |
| 106 | + split(addr,parts,/\./); | |
| 107 | + for(i=1; i<5; i++) { | |
| 108 | + if(i-1 < full_octets) { | |
| 109 | + mask=mask "255"; | |
| 110 | + net=net parts[i]; | |
| 111 | + } else { | |
| 112 | + if (i-1 == full_octets) { | |
| 113 | + mpart=256-lshift(1, 8-part_octets); | |
| 114 | + mask=mask mpart; | |
| 115 | + net=net and(parts[i],mpart); | |
| 116 | + } else { | |
| 117 | + mask=mask "0"; | |
| 118 | + net=net "0"; | |
| 119 | + } | |
| 120 | + } | |
| 121 | + if (i < 4) { | |
| 122 | + mask=mask "."; | |
| 123 | + net=net "."; | |
| 124 | + } | |
| 125 | + } | |
| 126 | + classes=classes " " net; | |
| 127 | + print "IF" no "_NETWORK=\"" net "\"; export " name "_NETWORK;"; | |
| 128 | + print "IF" no "_MASK=\"" mask "\"; export " name "_MASK;"; | |
| 82 | 129 | }') |
| 83 | 130 | } |
| 84 | 131 | ... | ... |
| ... | ... | @@ -40,6 +40,8 @@ do |
| 40 | 40 | eval printf \"%15s : %s\\\n\" \"IF${NO}_STATE\" \"\${IF${NO}_STATE}\" |
| 41 | 41 | eval printf \"%15s : %s\\\n\" \"IF${NO}_IPV4\" \"\${IF${NO}_IPV4}\" |
| 42 | 42 | eval printf \"%15s : %s\\\n\" \"IF${NO}_IPV6\" \"\${IF${NO}_IPV6}\" |
| 43 | + eval printf \"%15s : %s\\\n\" \"IF${NO}_MASK\" \"\${IF${NO}_MASK}\" | |
| 44 | + eval printf \"%15s : %s\\\n\" \"IF${NO}_NETWORK\" \"\${IF${NO}_NETWORK}\" | |
| 43 | 45 | NO=$((NO+1)) |
| 44 | 46 | done |
| 45 | 47 | ... | ... |
Please
register
or
login
to post a comment