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
|
#! /usr/bin/perl
use strict;
use warnings;
use DBI;
use Data::Dumper;
use FileHandle;
use JSON;
use AnyEvent::InfluxDB;
package nms;
use base 'Exporter';
our @EXPORT = qw(db_connect convert_mac convert_decimal);
BEGIN {
require "config.pm";
eval {
require "config.local.pm";
};
}
sub db_connect {
my $connstr = "dbi:Pg:dbname=" . $nms::config::db_name;
$connstr .= ";host=" . $nms::config::db_host unless (!defined($nms::config::db_host));
my $dbh = DBI->connect($connstr,
$nms::config::db_username,
$nms::config::db_password, {AutoCommit => 0})
or die "Couldn't connect to database";
return $dbh;
}
sub influx_connect {
my $ix = AnyEvent::InfluxDB->new(
server => $nms::config::influx_host,
username => $nms::config::influx_username,
password => $nms::config::influx_password,
) or die "Couldn't connect to InfluxDB";
return $ix;
}
# A few utilities to convert from SNMP binary address format to human-readable.
sub convert_mac {
return join(':', map { sprintf "%02x", $_ } unpack('C*', shift));
}
sub convert_ipv4 {
return join('.', map { sprintf "%d", $_ } unpack('C*', shift));
}
sub convert_ipv6 {
return join(':', map { sprintf "%x", $_ } unpack('n*', shift));
}
sub convert_addr {
my ($data, $type) = @_;
if ($type == 1) {
return convert_ipv4($data);
} elsif ($type == 2) {
return convert_ipv6($data);
} else {
die "Unknown address type $type";
}
}
# I am not a perl programmer
sub convert_decimal {
return join("",(map { sprintf "%c", $_ } split(/\./,shift)));
}
# Convert raw binary SNMP data to list of bits.
sub convert_bytelist {
return split //, unpack("B*", shift);
}
sub convert_lldp_caps {
my ($caps_data, $data) = @_;
my @caps = convert_bytelist($caps_data);
my @caps_names = qw(other repeater bridge ap router telephone docsis stationonly);
for (my $i = 0; $i < scalar @caps && $i < scalar @caps_names; ++$i) {
$data->{'cap_enabled_' . $caps_names[$i]} = $caps[$i];
}
}
1;
|