#!/usr/bin/env perl
use strict;
if ($#ARGV < 0) {
print "usage: $0 add|del [route_list]\\n";
exit 1;
}
my $flag = $ARGV[0];
use Cwd \'abs_path\';
use File::Basename \'dirname\';
my $list_file = dirname(abs_path($0)) . "/routes_cn.txt";
$list_file = $ARGV[1] if $#ARGV >= 1;
my %device;
foreach ( `route -n` ) {
chomp;
my ($dest, $gateway, $mask, $flag, $metric, $ref, $use_num, $interface) = split /\\s+/;
if ($dest eq \'0.0.0.0\' and !($interface =~ m/(tun|tap)\\d/)) {
$device{$interface} = $gateway;
# print "$interface\\t$gateway\\n";
}
}
open FILE, "<", $list_file
or die "File $list_file: $!\\n";
while (<FILE>) {
chomp;
next if m/\\W*#/;
my ($net, $msk) = split /\\//;
# print "$net\\t$msk\\n";
foreach my $interface ( keys %device ) {
my $gateway = $device{$interface};
if ($flag eq "add") {
system("route add -net $net netmask $msk gw $gateway dev $interface");
} elsif ($flag eq "del") {
system("route del -net $net netmask $msk");
}
}
}
close FILE;