restart_port_snmp.pl 3.7 KB

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