restart_port_snmp.pl 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  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::mysql;
  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.ip, D.device_name, D.vendor_id, D.device_model_id, DP.port, DP.snmp_index, D.rw_community, D.snmp_version 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 $ip=$dev_port->{ip};
  40. my $model_id=$dev_port->{device_model_id};
  41. my $model_rec = get_record_sql($dbh,'SELECT model_name FROM device_models WHERE id='.$model_id);
  42. my $model = $model_rec->{model_name};
  43. my $port=$dev_port->{port};
  44. my $vendor_id = $dev_port->{vendor_id};
  45. my $snmp_index=$dev_port->{snmp_index};
  46. my $community=$dev_port->{rw_community};
  47. my $snmp_version=$dev_port->{snmp_version};
  48. my $device_name = $dev_port->{device_name};
  49. db_log_warning($dbh,"Restart $auth_ident at $device_name ($model $ip) [$port] request found. Try.");
  50. my $poe_oid;
  51. my $admin_oid;
  52. my $poe_enabled_value = 1;
  53. my $poe_disabled_value = 2;
  54. my $ret;
  55. #################### PORT STATE ###################
  56. #default
  57. $admin_oid=$admin_status_oid.$port;
  58. ##################### POE #########################
  59. #default
  60. $poe_oid=$pethPsePortAdminEnable.$snmp_index;
  61. #Huawei
  62. if ($vendor_id eq 3) {
  63. $poe_oid=$huawei_poe_oid.$snmp_index;
  64. }
  65. #NetGear
  66. if ($vendor_id eq 10) {
  67. $poe_oid=$netgear_poe_oid.$snmp_index;
  68. }
  69. ##################### Action ########################
  70. db_log_debug($dbh,"POE oid: $poe_oid");
  71. db_log_debug($dbh,"Admin oid: $admin_oid");
  72. if ($poe_oid) {
  73. $ret=snmp_set_int($ip,$poe_oid,$poe_disabled_value,$community,161,$snmp_version);
  74. db_log_info($dbh,"Try disable POE at port $port.");
  75. db_log_debug($dbh,"Send to oid: $poe_oid value: $poe_disabled_value");
  76. }
  77. if ($admin_oid) {
  78. $ret=snmp_set_int($ip,$admin_oid,$poe_disabled_value,$community,161,$snmp_version);
  79. db_log_info($dbh,"Try shutdown port $port.");
  80. db_log_debug($dbh,"Send to oid: $admin_oid value: $poe_disabled_value");
  81. }
  82. sleep($sleep_time);
  83. if ($admin_oid) {
  84. $ret=snmp_set_int($ip,$admin_oid,$poe_enabled_value,$community,161,$snmp_version);
  85. db_log_info($dbh,"Enable POE at port $port.");
  86. db_log_debug($dbh,"Send to oid: $admin_oid value: $poe_enabled_value");
  87. }
  88. if ($poe_oid) {
  89. $ret=snmp_set_int($ip,$poe_oid,$poe_enabled_value,$community,161,$snmp_version);
  90. db_log_info($dbh,"Up port $port.");
  91. db_log_debug($dbh,"Send to oid: $poe_oid value: $poe_enabled_value");
  92. }
  93. db_log_info($dbh,'Done!');
  94. exit;