File: mrouted-genconf

package info (click to toggle)
libsnmp-session-perl 1.14~git20201002.0dedded-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 1,080 kB
  • sloc: perl: 11,603; ansic: 25; makefile: 13
file content (114 lines) | stat: -rwxr-xr-x 3,755 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#!/usr/local/bin/perl -w

use strict;
use SNMP_Session "0.58";
use BER;
use Socket;

my $mrouters =
[
 'public@it-ws.ten-34.net:9161',
 'public@de-ws.ten-34.net',
 'public@ch-ws.ten-34.net',
 'public@at-ws.ten-34.net',
 'public@uk-ws.ten-34.net',
 ];

## Define this if you want WorkDir set in the generated configuration
## file.
##
#my $work_dir = '/var/tmp/mrtg';

## Define this if you want IconDir set in the generated configuration
## file.
##
#my $icon_dir = '/lan/stat';

## Define this if you want Directory[] set in each target.
##
#my $directory = 'ten-34/ipmcast';

## An absolute maximum for traffic rates over tunnels, in Bytes per
## second.  You probably don't need to change this.
##
my $abs_max = '100000000';

my $dvmrpInterfaceType = [1,3,6,1,3,62,1,1,3,1,2];
my $dvmrpInterfaceRemoteAddress = [1,3,6,1,3,62,1,1,3,1,5];
my $dvmrpInterfaceMetric = [1,3,6,1,3,62,1,1,3,1,7];
my $dvmrpInterfaceRateLimit = [1,3,6,1,3,62,1,1,3,1,8];
my $dvmrpInterfaceInOctets = [1,3,6,1,3,62,1,1,3,1,11];
my $dvmrpInterfaceOutOctets = [1,3,6,1,3,62,1,1,3,1,12];

## Print head of configuration file
print "WorkDir: $work_dir\n" if defined $work_dir;
print "IconDir: $icon_dir\n" if defined $icon_dir;
print "WriteExpires: Yes\nWeekformat[^]: V\nWithPeak[_]: wmy\n";

foreach my $target (@{$mrouters}) {
    my $session;
    my $abs_max_bytes = $abs_max >> 3;
    my ($community, $mrouter, $port);

    if ($target =~ /^(.*)@(.*):([0-9]+)$/) {
	$community = $1; $mrouter = $2; $port = $3;
    } elsif ($target =~ /^(.*)@(.*)$/) {
	$community = $1; $mrouter = $2; $port = 161;
    } else {
	warn "Malformed target $target\n";
	next;
    }
    $session = SNMP_Session->open ($mrouter, $community, $port)
	|| (warn ("Opening SNMP session to $mrouter\n"), next);

    my $snmp_target = $community.'@'.$mrouter;
    $snmp_target .= ":".$port
	unless $port == 161;
    print "\n\nTarget[$mrouter-mroutes]:
    1.3.6.1.3.62.1.1.9.0&1.3.6.1.3.62.1.1.10.0:$snmp_target\n";
    print "Directory[$mrouter-mroutes]: $directory\n"
	if defined $directory;
    print <<EOM
MaxBytes[$mrouter-mroutes]: 8000
AbsMax[$mrouter-mroutes]: 100000
Options[$mrouter-mroutes]: growright,gauge,nopercent
ShortLegend[$mrouter-mroutes]: routes
YLegend[$mrouter-mroutes]: # of routes
Title[$mrouter-mroutes]: Multicast routes on $mrouter
PageTop[$mrouter-mroutes]: <hr><H3>Multicast routes on $mrouter</H3>
Legend1[$mrouter-mroutes]: # reachable DVMRP routes
Legend2[$mrouter-mroutes]: # DVMRP routing table entries
Legend3[$mrouter-mroutes]: max # reachable routes
Legend4[$mrouter-mroutes]: max # routing table entries
LegendI[$mrouter-mroutes]: &nbsp;reachable
LegendO[$mrouter-mroutes]: &nbsp;total
EOM
    eval {
	$session->map_table
	([$dvmrpInterfaceType, $dvmrpInterfaceRemoteAddress,
	  $dvmrpInterfaceMetric, $dvmrpInterfaceRateLimit], sub
	 { 
	     my ($index, $type, $peer_addr, $metric, $rate_limit) = @_;
	     grep (defined $_ && ($_=pretty_print $_),
		   ($type, $peer_addr, $metric, $rate_limit));
	     my $rate_limit_bytes = $rate_limit * 1000 >> 3;
	     ## ignore interfaces other than tunnels for now
	     return unless $type == 1;
	     my $peer_name = gethostbyaddr(pack ("C4",split ('\.',$peer_addr)),
					   AF_INET)
		 || $peer_addr;
	     my $graph_name = $mrouter.'-'.$peer_name;
		 print <<EOM;

Target[$graph_name]: 1.3.6.1.3.62.1.1.3.1.11.$index&1.3.6.1.3.62.1.1.3.1.12.$index:$snmp_target
PageTop[$graph_name]: <hr><H3>Tunnel $mrouter -> $peer_name (metric $metric)</H3>
Options[$graph_name]: growright,bits
MaxBytes[$graph_name]: $rate_limit_bytes
AbsMax[$graph_name]: $abs_max_bytes
Title[$graph_name]: Mbone Tunnel from $mrouter to $peer_name
EOM
    print "Directory[$graph_name]: $directory\n"
	if $directory;
	 }) };
    $session->close ();
}