AMPR-Rip44
view release on metacpan or search on metacpan
243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
my
(
$e_net_i
,
$e_net_s
,
$e_netmask
,
$e_netmask_s
,
$e_nexthop_s
) =
@_
;
# netmask is correct and not too wide
my
$prefix_len
= mask2prefix(
$e_netmask
);
if
(
$prefix_len
< 0) {
warn
"invalid netmask: $e_netmask_s\n"
if
(
$verbose
);
return
(0,
'invalid netmask'
);
}
if
(
$prefix_len
<
$minimum_prefix_len
) {
warn
"$e_net_s/$e_netmask_s => $e_nexthop_s blocked, prefix too short\n"
;
return
(0,
'prefix length too short'
);
}
# the network-netmask pair makes sense: network & netmask == network
if
((
$e_net_i
&
$e_netmask
) !=
$e_net_i
) {
#print "e_net '$e_net_i' e_netmask '$e_netmask' ANDs to " . ($e_net_i & $e_netmask) . "\n";
warn
"$e_net_s/$e_netmask_s => $e_nexthop_s blocked, subnet-netmask pair does not make sense\n"
if
(
$verbose
);
return
(0,
'invalid subnet-netmask pair'
);
}
# network is in 44/8
if
(
$e_net_s
!~ /
$net_44_regexp
/) {
warn
"$e_net_s/$e_netmask_s => $e_nexthop_s blocked, non-amprnet address\n"
if
(
$verbose
);
return
(0,
'net not in 44/8'
);
}
# nexthop address is not in 44/8
if
(
$e_nexthop_s
=~ /
$net_44_regexp
/) {
warn
"$e_net_s/$e_netmask_s => $e_nexthop_s blocked, nexthop is within amprnet\n"
if
(
$verbose
);
return
(0,
'nexthop is in 44/8'
);
}
# nexthop address does not point to self
if
(
defined
$my_addresses
{
$e_nexthop_s
}) {
warn
"$e_net_s/$e_netmask_s => $e_nexthop_s blocked, local gw\n"
if
(
$verbose
);
return
(0,
'local gw'
);
}
return
(1,
'ok'
);
}
# process a RIPv2 route entry
sub
process_rip_route_entry($)
{
( run in 0.342 second using v1.01-cache-2.11-cpan-26ccb49234f )