| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- #!/usr/bin/perl
- #
- # Copyright (C) Roman Dmitriev, rnd@rajven.ru
- #
- use FindBin '$Bin';
- use lib "$Bin/";
- use strict;
- use Time::Local;
- use FileHandle;
- use Data::Dumper;
- use eyelib::config;
- use eyelib::main;
- use eyelib::net_utils;
- use eyelib::database;
- use eyelib::common;
- use eyelib::snmp;
- use Net::SNMP qw(:snmp);
- my $pethPsePortAdminEnable ='.1.3.6.1.2.1.105.1.1.1.3.1.';
- my $huawei_poe_oid ='.1.3.6.1.4.1.2011.5.25.195.3.1.3.';
- my $allied_poe_oid ='.1.3.6.1.2.1.105.1.1.1.3.1.';
- my $hp_poe_oid ='.1.3.6.1.2.1.105.1.1.1.3.1.';
- my $netgear_poe_oid ='.1.3.6.1.4.1.4526.11.15.1.1.1.6.1.';
- my $mikrotik_poe_oid ='.1.3.6.1.4.1.14988.1.1.15.1.1.3.';
- my $admin_status_oid ='.1.3.6.1.2.1.2.2.1.7.';
- #wait for up interface
- my $sleep_time = 15;
- $|=1;
- exit if (!$ARGV[0]);
- my $HOST_IP = $ARGV[0];
- my $IP_ATON=StrToIp($HOST_IP);
- my $auth_rec = get_record_sql($dbh,'SELECT * FROM user_auth WHERE deleted=0 and ip_int='.$IP_ATON);
- if (!$auth_rec) { db_log_error("Record with ip $HOST_IP not found! Bye."); exit; }
- my $auth_id = $auth_rec->{id};
- my $auth_name = $auth_rec->{dns_name};
- my $auth_ident = $HOST_IP;
- if ($auth_name) { $auth_ident = $auth_name."[".$HOST_IP."]"; }
- my $d_sql="SELECT D.id, D.ip, D.device_name, D.vendor_id, D.device_model_id, DP.port, DP.snmp_index FROM devices AS D, device_ports AS DP, connections AS C WHERE D.snmp_version>0 and D.id = DP.device_id AND DP.id = C.port_id AND C.auth_id=$auth_id AND DP.uplink=0";
- my $dev_port = get_record_sql($dbh,$d_sql);
- if (!$dev_port) { db_log_error($dbh,"Connection for $HOST_IP not found! Bye."); exit; }
- my $switch = get_record_sql($dbh,'SELECT * FROM devices WHERE id='.$dev_port->{id});
- if (!$switch) { db_log_error($dbh,"Switch for $HOST_IP not found! Bye."); exit; }
- setCommunity($switch);
- my $ip=$dev_port->{ip};
- my $model_id=$dev_port->{device_model_id};
- my $model_rec = get_record_sql($dbh,'SELECT model_name FROM device_models WHERE id='.$model_id);
- my $model = $model_rec->{model_name};
- my $port=$dev_port->{port};
- my $vendor_id = $dev_port->{vendor_id};
- my $snmp_index=$dev_port->{snmp_index};
- my $device_name = $dev_port->{device_name};
- db_log_warning($dbh,"Restart $auth_ident at $device_name ($model $ip) [$port] request found. Try.");
- my $poe_oid;
- my $admin_oid;
- my $poe_enabled_value = 1;
- my $poe_disabled_value = 2;
- my $ret;
- #################### PORT STATE ###################
- #default
- $admin_oid=$admin_status_oid.$port;
- ##################### POE #########################
- #default
- $poe_oid=$pethPsePortAdminEnable.$snmp_index;
- #Huawei
- if ($vendor_id eq 3) {
- $poe_oid=$huawei_poe_oid.$snmp_index;
- }
- #NetGear
- if ($vendor_id eq 10) {
- $poe_oid=$netgear_poe_oid.$snmp_index;
- }
- ##################### Action ########################
- db_log_debug($dbh,"POE oid: $poe_oid");
- db_log_debug($dbh,"Admin oid: $admin_oid");
- if ($poe_oid) {
- $ret=snmp_set_int($ip,$poe_oid,$poe_disabled_value,$switch->{snmp});
- db_log_info($dbh,"Try disable POE at port $port.");
- db_log_debug($dbh,"Send to oid: $poe_oid value: $poe_disabled_value");
- }
- if ($admin_oid) {
- $ret=snmp_set_int($ip,$admin_oid,$poe_disabled_value,$switch->{snmp});
- db_log_info($dbh,"Try shutdown port $port.");
- db_log_debug($dbh,"Send to oid: $admin_oid value: $poe_disabled_value");
- }
- sleep($sleep_time);
- if ($admin_oid) {
- $ret=snmp_set_int($ip,$admin_oid,$poe_enabled_value,$switch->{snmp});
- db_log_info($dbh,"Enable POE at port $port.");
- db_log_debug($dbh,"Send to oid: $admin_oid value: $poe_enabled_value");
- }
- if ($poe_oid) {
- $ret=snmp_set_int($ip,$poe_oid,$poe_enabled_value,$switch->{snmp});
- db_log_info($dbh,"Up port $port.");
- db_log_debug($dbh,"Send to oid: $poe_oid value: $poe_enabled_value");
- }
- db_log_info($dbh,'Done!');
- exit;
|