| version 1.1, 2018/05/07 21:01:06 |
version 1.2, 2018/05/07 22:20:40 |
|
|
| # 2018-05-07 - created |
# 2018-05-07 - created |
| # |
# |
| |
|
| # $Platon$ |
# $Platon: scripts/shell/firewall/firewall.d/subnets/simplify-subnets.sh,v 1.1 2018/05/07 21:01:06 nepto Exp $ |
| |
|
| SUBNET_FILE="$1"; |
SUBNET_FILE="$1"; |
| |
|
| Line 21 if [ -z "$SUBNET_FILE" ]; then |
|
| Line 21 if [ -z "$SUBNET_FILE" ]; then |
|
| exit 1; |
exit 1; |
| fi |
fi |
| |
|
| prev_subnet_0=''; |
prev_C=''; |
| |
prev_B=''; |
| |
cnt_CinB=1; |
| while IFS='' read -r line; do |
while IFS='' read -r line; do |
| if [ -z "$line" -o "${line#\#}"x != "${line}x" ]; then |
if [ -z "$line" -o "${line#\#}"x != "${line}x" ]; then |
| echo "$line"; |
echo "$line"; |
| Line 30 while IFS='' read -r line; do |
|
| Line 32 while IFS='' read -r line; do |
|
| |
|
| subnet="`echo "$line" | cut -f1 -d/`"; |
subnet="`echo "$line" | cut -f1 -d/`"; |
| mask="`echo "$line" | cut -f2 -d/`"; |
mask="`echo "$line" | cut -f2 -d/`"; |
| |
if [ "$mask" -gt 24 ]; then |
| |
mask=24; |
| |
fi |
| |
|
| |
subnet_C="`echo "$subnet" | sed 's/\.[0-9]\+$/.0/'`"; |
| |
subnet_B="`echo "$subnet" | sed 's/\.[0-9]\+\.[0-9]\+$/.0.0/'`"; |
| |
|
| |
if [ -z "$to_write" ]; then |
| |
prev_C="$subnet_C"; |
| |
prev_B="$subnet_B"; |
| |
to_write="$subnet_C/$mask"; |
| |
fi |
| |
|
| # Easy |
if [ "$subnet_C" = "$prev_C" ]; then |
| if [ "$mask" -lt 24 ]; then |
|
| echo "$subnet/$mask"; |
|
| continue; |
continue; |
| fi |
fi |
| |
|
| subnet_0="`echo "$subnet" | sed 's/\.[0-9]\+$/.0/'`"; |
if [ "$subnet_B" = "$prev_B" ]; then |
| if [ "$subnet_0" = "$prev_subnet_0" ]; then |
to_write="$to_write"$'\n'; |
| |
to_write="$to_write$subnet_C/24"; |
| |
prev_C="$subnet_C"; |
| |
cnt_CinB=$(( cnt_CinB + 1 )); |
| continue; |
continue; |
| fi |
fi |
| |
|
| echo "$subnet_0/24"; |
if [ "$cnt_CinB" -gt 128 ]; then |
| prev_subnet_0="$subnet_0"; |
echo "# Merged $cnt_CinB C-classes to one B-class"; |
| |
echo "$prev_B/16"; |
| |
else if [ "$cnt_CinB" -eq 1 ]; then |
| |
if [[ "$to_write" = */24 ]]; then |
| |
echo "# Simplified to C-class"; |
| |
echo "$to_write"; |
| |
else |
| |
echo "# Unchanged network"; |
| |
echo "$to_write"; |
| |
fi |
| |
else |
| |
echo "# Found $cnt_CinB similar networks"; |
| |
echo "$to_write"; |
| |
fi fi |
| |
|
| |
to_write="$subnet_C/$mask"; |
| |
prev_B="$subnet_B"; |
| |
cnt_CinB=1; |
| done < "$SUBNET_FILE"; |
done < "$SUBNET_FILE"; |
| |
|
| |
|