AMPR-Rip44

 view release on metacpan or  search on metacpan

bin/rip44d  view on Meta::CPAN

243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
        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 )