restart_port_snmp.pl 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. #!/usr/bin/perl
  2. #
  3. # Copyright (C) Roman Dmitiriev, rnd@rajven.ru
  4. #
  5. use FindBin '$Bin';
  6. use lib "$Bin/";
  7. use strict;
  8. use Time::Local;
  9. use FileHandle;
  10. use Data::Dumper;
  11. use eyelib::config;
  12. use eyelib::main;
  13. use eyelib::net_utils;
  14. use eyelib::database;
  15. use eyelib::snmp;
  16. use Net::SNMP qw(:snmp);
  17. my $pethPsePortAdminEnable ='.1.3.6.1.2.1.105.1.1.1.3.1.';
  18. my $huawei_poe_oid ='.1.3.6.1.4.1.2011.5.25.195.3.1.3.';
  19. my $allied_poe_oid ='.1.3.6.1.2.1.105.1.1.1.3.1.';
  20. my $hp_poe_oid ='.1.3.6.1.2.1.105.1.1.1.3.1.';
  21. my $netgear_poe_oid ='.1.3.6.1.4.1.4526.11.15.1.1.1.6.1.';
  22. my $mikrotik_poe_oid ='.1.3.6.1.4.1.14988.1.1.15.1.1.3.';
  23. my $admin_status_oid ='.1.3.6.1.2.1.2.2.1.7.';
  24. #wait for up interface
  25. my $sleep_time = 15;
  26. $|=1;
  27. exit if (!$ARGV[0]);
  28. my $HOST_IP = $ARGV[0];
  29. my $IP_ATON=StrToIp($HOST_IP);
  30. my $auth_rec = get_record_sql($dbh,'SELECT * FROM User_auth WHERE deleted=0 and ip_int='.$IP_ATON);
  31. if (!$auth_rec) { db_log_error("Record with ip $HOST_IP not found! Bye."); exit; }
  32. my $auth_id = $auth_rec->{id};
  33. my $auth_name = $auth_rec->{dns_name};
  34. my $auth_ident = $HOST_IP;
  35. if ($auth_name) { $auth_ident = $auth_name."[".$HOST_IP."]"; }
  36. 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";
  37. my $dev_port = get_record_sql($dbh,$d_sql);
  38. if (!$dev_port) { db_log_error($dbh,"Connection for $HOST_IP not found! Bye."); exit; }
  39. my $switch = get_record_sql($dbh,'SELECT * FROM devices WHERE id='.$dev_port->{id});
  40. if (!$switch) { db_log_error($dbh,"Switch for $HOST_IP not found! Bye."); exit; }
  41. setCommunity($switch);
  42. my $ip=$dev_port->{ip};
  43. my $model_id=$dev_port->{device_model_id};
  44. my $model_rec = get_record_sql($dbh,'SELECT model_name FROM device_models WHERE id='.$model_id);
  45. my $model = $model_rec->{model_name};
  46. my $port=$dev_port->{port};
  47. my $vendor_id = $dev_port->{vendor_id};
  48. my $snmp_index=$dev_port->{snmp_index};
  49. my $device_name = $dev_port->{device_name};
  50. db_log_warning($dbh,"Restart $auth_ident at $device_name ($model $ip) [$port] request found. Try.");
  51. my $poe_oid;
  52. my $admin_oid;
  53. my $poe_enabled_value = 1;
  54. my $poe_disabled_value = 2;
  55. my $ret;
  56. #################### PORT STATE ###################
  57. #default
  58. $admin_oid=$admin_status_oid.$port;
  59. ##################### POE #########################
  60. #default
  61. $poe_oid=$pethPsePortAdminEnable.$snmp_index;
  62. #Huawei
  63. if ($vendor_id eq 3) {
  64. $poe_oid=$huawei_poe_oid.$snmp_index;
  65. }
  66. #NetGear
  67. if ($vendor_id eq 10) {
  68. $poe_oid=$netgear_poe_oid.$snmp_index;
  69. }
  70. ##################### Action ########################
  71. db_log_debug($dbh,"POE oid: $poe_oid");
  72. db_log_debug($dbh,"Admin oid: $admin_oid");
  73. if ($poe_oid) {
  74. $ret=snmp_set_int($ip,$poe_oid,$poe_disabled_value,$switch->{snmp});
  75. db_log_info($dbh,"Try disable POE at port $port.");
  76. db_log_debug($dbh,"Send to oid: $poe_oid value: $poe_disabled_value");
  77. }
  78. if ($admin_oid) {
  79. $ret=snmp_set_int($ip,$admin_oid,$poe_disabled_value,$switch->{snmp});
  80. db_log_info($dbh,"Try shutdown port $port.");
  81. db_log_debug($dbh,"Send to oid: $admin_oid value: $poe_disabled_value");
  82. }
  83. sleep($sleep_time);
  84. if ($admin_oid) {
  85. $ret=snmp_set_int($ip,$admin_oid,$poe_enabled_value,$switch->{snmp});
  86. db_log_info($dbh,"Enable POE at port $port.");
  87. db_log_debug($dbh,"Send to oid: $admin_oid value: $poe_enabled_value");
  88. }
  89. if ($poe_oid) {
  90. $ret=snmp_set_int($ip,$poe_oid,$poe_enabled_value,$switch->{snmp});
  91. db_log_info($dbh,"Up port $port.");
  92. db_log_debug($dbh,"Send to oid: $poe_oid value: $poe_enabled_value");
  93. }
  94. db_log_info($dbh,'Done!');
  95. exit;