#!/usr/bin/perl -w

# SNMP::Extension::PassPersist is required.
# This is in the package libsnmp-extension-passpersist-perl on Debian and
# Ubuntu
# And in the package dev-perl/SNMP-Extension-PassPersist from
# https://git.grifon.fr/alarig/SwordArMor-gentoo-overlay.git overlay
# Usage : Copy the script to /usr/local/bin/ifAlias_persist and add to
# /etc/snmp/snmpd.conf
# pass_persist .1.3.6.1.2.1.31.1.1.1.18 /usr/local/bin/ifAlias_persist

use strict;
use SNMP::Extension::PassPersist;


# create the object
my $extsnmp = SNMP::Extension::PassPersist->new(
    backend_collect => \&update_tree,
    idle_count      => 10,      # no more than 10 idle cycles
    refresh         => 60,      # refresh every 60 sec
);

# run the program
$extsnmp->run;

sub update_tree {
    my ($self) = @_;


	my $Base = ".1.3.6.1.2.1.31.1.1.1.18";
	# get the interfaces
	my @iface_list = `ip l | grep mtu | cut -d @ -f 1`;
	my $type = "string";

	foreach my $row (@iface_list){
		my @split = split(": ", $row);
		# remove a possible \n
		$split[1] =~ s/\R//g;

		# cat the file
		my $filename = "/sys/class/net/$split[1]/ifalias";
		open(my $fh, '<:encoding(UTF-8)', $filename)
			or die "Could not open file '$filename' $!";
		# fill the OID with the content
		while (my $desc = <$fh>) {
			chomp $desc;
			my ($key, $value) = ("$Base.$split[0]",$desc);
			$self->add_oid_entry($key,$type,$value);
		}
	close $fh;
	}
	
}