DocsIfCmts.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384
  1. <?php
  2. namespace OSS_SNMP\MIBS;
  3. class DocsIfCmts extends \OSS_SNMP\MIB {
  4. const OID_docsIfCmtsCmStatusMacAddress = "1.3.6.1.2.1.10.127.1.3.3.1.2";
  5. //const OID_docsIfCmtsCmStatusTable = "1.3.6.1.2.1.10.127.1.3.3";
  6. const OID_docsIfCmtsCmStatusUpChannelIfIndex = "1.3.6.1.2.1.10.127.1.3.3.1.5";
  7. const OID_docsIfCmtsCmStatusDownChannelIfIndex = "1.3.6.1.2.1.10.127.1.3.3.1.4";
  8. const OID_docsIfCmtsCmStatusIpAddress = "1.3.6.1.2.1.10.127.1.3.3.1.3";
  9. const OID_docsQosCmtsIfIndex = "1.3.6.1.2.1.10.127.7.1.11.1.3";
  10. const OID_docsQos3CmtsIfIndex = "1.3.6.1.4.1.4491.2.1.21.1.11.1.3";
  11. const OID_docsIfCmtsCmStatusIndex = "1.3.6.1.2.1.10.127.1.3.3.1.1";
  12. const OID_docsQosServiceFlowOctets = "1.3.6.1.2.1.10.127.7.1.4.1.2";
  13. const OID_docsQosServiceFlowDirection = "1.3.6.1.2.1.10.127.7.1.3.1.7";
  14. const OID_docsQos3ServiceFlowDirection = "1.3.6.1.4.1.4491.2.1.21.1.3.1.7";
  15. const OID_docsIfCmStatusRxPower = "1.3.6.1.2.1.10.127.1.1.1.1.6";
  16. const OID_docsIfCmtsCmStatusRxPower = "1.3.6.1.2.1.10.127.1.3.3.1.6";
  17. const OID_docsIfCmtsCmStatusValue = "1.3.6.1.2.1.10.127.1.3.3.1.9";
  18. const OID_docsQos3ServiceFlowOctets = "1.3.6.1.4.1.4491.2.1.21.1.4.1.2";
  19. const OID_docsIfSigQSignalNoise = "1.3.6.1.2.1.10.127.1.1.4.1.5";
  20. const OID_docsIfSigQMicroreflections = "1.3.6.1.2.1.10.127.1.1.4.1.6";
  21. const docsIfCmtsChannelUtilization = "1.3.6.1.2.1.10.127.1.3.9.1.3";
  22. const OID_ipNetToMediaPhysAddress = "1.3.6.1.2.1.4.22.1.2";
  23. const OID_docsIfCmtsCmPtr = "1.3.6.1.2.1.10.127.1.3.7.1.2";
  24. const OID_docsIfCmStatusTxPower = "1.3.6.1.2.1.10.127.1.2.2.1.3";
  25. const OID_docsIfDownChannelFrequency = "1.3.6.1.2.1.10.127.1.1.1.1.2";
  26. const OID_docsIfDownChannelModulation = "1.3.6.1.2.1.10.127.1.1.1.1.4";
  27. const OID_docsIfDownChannelPower = "1.3.6.1.2.1.10.127.1.1.1.1.6";
  28. const OID_docsIfUpChannelFrequency = "1.3.6.1.2.1.10.127.1.1.2.1.2";
  29. const OID_docsIfUpChannelWidth = "1.3.6.1.2.1.10.127.1.1.2.1.3";
  30. const OID_docsIfCmtsCmStatusSignalNoise = "1.3.6.1.2.1.10.127.1.3.3.1.13";
  31. public function docsIfUpChannelWidth(){
  32. return $this->getSNMP()->walk1d(self::OID_docsIfUpChannelWidth);
  33. }
  34. public function docsIfUPChannelFrequency(){
  35. return $this->getSNMP()->walk1d(self::OID_docsIfUpChannelFrequency);
  36. }
  37. public function docsIfDownChannelPower(){
  38. return $this->getSNMP()->walk1d(self::OID_docsIfDownChannelPower);
  39. }
  40. public function docsIfDownChannelModulation($decode = false){
  41. if(!$decode) {
  42. return $this->getSNMP()->walk1d(self::OID_docsIfDownChannelModulation);
  43. }else{
  44. $trans = array(1 => "unknown", 2 => "other", 3 => "qam64", 4 => "qam256");
  45. $rtr = array();
  46. foreach($this->getSNMP()->walk1d(self::OID_docsIfDownChannelModulation) as $if => $val){
  47. $rtr[$if] = $trans[$val];
  48. }
  49. return $rtr;
  50. }
  51. }
  52. public function docsIfDownChannelFrequency(){
  53. return $this->getSNMP()->walk1d(self::OID_docsIfDownChannelFrequency);
  54. }
  55. public function docsIfCmtsCmPtr(){
  56. $ptr = array();
  57. foreach($this->getSNMP()->realWalk(self::OID_docsIfCmtsCmPtr) as $key => $val){
  58. $mac =implode('',array_map(function($x) { return sprintf("%02x", $x);}, array_slice(explode(".",$key),14,6)));
  59. $ptr[$mac] = $this->getSNMP()->parseSnmpValue($val);
  60. }
  61. return $ptr;
  62. }
  63. public function ipNetToMediaPhysAddress(){
  64. $rtr = array();
  65. foreach($this->getSNMP()->realWalk(self::OID_ipNetToMediaPhysAddress) as $k => $m){
  66. ////tring(40) ".1.3.6.1.2.1.4.22.1.2.2000001.10.14.8.69"
  67. //string(23) "STRING: 0:c:e5:7d:93:d0"
  68. ////
  69. $karray = preg_split("|\.|",$k);
  70. $mac = preg_split("|:|", trim(substr($m,8)));
  71. $mac = sprintf("%02x:%02x:%02x:%02x:%02x:%02x",$mac[0], $mac[1], $mac[2], $mac[3], $mac[4], $mac[5]);
  72. $l_ke = count($karray);
  73. $rtr[$mac] = sprintf("%d.%d.%d.%d",$karray[$l_ke - 4],$karray[$l_ke - 3], $karray[$l_ke - 2], $karray[$l_ke-1]);
  74. }
  75. return $rtr;
  76. }
  77. public function docsQos3ServiceFlowDirection($translate=false){
  78. $rtr = array();
  79. $oid = self::OID_docsQos3ServiceFlowDirection;
  80. $stats = $this->getSNMP()->realWalk($oid);
  81. foreach((array)$stats as $k => $v){
  82. $k_prim = preg_split("|\.|",$k);
  83. //$dds = strpos($v, ':');
  84. if(!isset($k_prim[15])){
  85. continue;
  86. }
  87. $rtr[$k_prim[15].".".$k_prim[16]] = $this->getSNMP()->parseSnmpValue($v);
  88. }
  89. if( !$translate )
  90. return $rtr;
  91. return $this->getSNMP()->translate( $rtr, self::$FLOW_DIRECTIONS);
  92. }
  93. public function docsQos3ServiceFlowDirectionX($translate=false, $id=null){
  94. $rtr = array();
  95. if(is_null($id)) $oid = self::OID_docsQos3ServiceFlowDirection;
  96. else $oid = self::OID_docsQos3ServiceFlowDirection. "." .$id;
  97. $stats = $this->getSNMP()->realWalk($oid);
  98. foreach((array)$stats as $k => $v){
  99. $k_prim = preg_split("|\.|",$k);
  100. //$dds = strpos($v, ':');
  101. if(!isset($k_prim[15])){
  102. break;
  103. }
  104. $rtr[$k_prim[15].".".$k_prim[16]] = $this->getSNMP()->parseSnmpValue($v);
  105. }
  106. if( !$translate )
  107. return $rtr;
  108. return $this->getSNMP()->translate( $rtr, self::$FLOW_DIRECTIONS);
  109. }
  110. private function getDecMac($mac){
  111. preg_match('/^([a-f0-9]{1,2})[-:]*([a-f0-9]{1,2})[-:]*([a-f0-9]{1,2})[-:]*([a-f0-9]{1,2})[-:]*([a-f0-9]{1,2})[-:]*([a-f0-9]{1,2})$/i', $mac, $matches);
  112. unset($matches[0]);
  113. return implode('.', array_map('hexdec', $matches));
  114. }
  115. public function docsQos3CmtsIfIndex($mac=null){
  116. $rtr = array();
  117. if(!is_null($mac)){
  118. $oid = self::OID_docsQos3CmtsIfIndex .'.'.$this->getDecMac($mac);
  119. }else{
  120. $oid = self::OID_docsQos3CmtsIfIndex;
  121. }
  122. foreach((array)$this->getSNMP()->realWalk($oid) as $k => $v){
  123. $k_prim = preg_split("|\.|",$k);
  124. if(count($k_prim) < 20){
  125. continue;
  126. }
  127. $k_mac = sprintf("%02x:%02x:%02x:%02x:%02x:%02x",
  128. $k_prim[15], $k_prim[16], $k_prim[17], $k_prim[18], $k_prim[19], $k_prim[20]);
  129. $rtr[$k_mac][] = $this->getSNMP()->parseSnmpValue($v). ".".$k_prim[21];
  130. }
  131. return $rtr;
  132. }
  133. public function docsQos3ServiceFlowOctets($ifId=null){
  134. try{
  135. $rtr = array();
  136. if(!is_null($ifId)){
  137. $oid = self::OID_docsQos3ServiceFlowOctets ."." .$ifId;
  138. }else{
  139. $oid = self::OID_docsQos3ServiceFlowOctets;
  140. }
  141. foreach($this->getSNMP()->realWalk($oid) as $k => $v){
  142. $k_prim = preg_split("|\.|",$k);
  143. $rtr[$k_prim[15].".".$k_prim[16]] = $this->getSNMP()->parseSnmpValue($v);
  144. }
  145. return $rtr;
  146. }catch (\Exception $e){
  147. echo "ouch! ".$e->getMessage()."\n";
  148. return array();
  149. }
  150. }
  151. public static $FLOW_DIRECTIONS = array(1 => "downstream", 2 => 'upstream');
  152. public function docsQosServiceFlowDirection($translate=false){
  153. $oid = self::OID_docsQosServiceFlowDirection;
  154. $states = $this->getSNMP()->realWalk($oid);
  155. if(!is_array($states)) return null;
  156. foreach($states as $k => $v){
  157. $oid_arr = explode(".", $k);
  158. $states[$oid_arr[count($oid_arr) -1]] = $this->getSNMP()->parseSnmpValue($v);
  159. unset($states[$k]);
  160. }
  161. $rtr = array();
  162. if( !$translate )
  163. return $states;
  164. return $this->getSNMP()->translate( $states, self::$FLOW_DIRECTIONS);
  165. }
  166. public function docsQosServiceFlowDirectionX($translate=false, $id=null){
  167. if(is_null($id)) $oid = self::OID_docsQosServiceFlowDirection;
  168. else $oid = self::OID_docsQosServiceFlowDirection. "." .$id;
  169. $rtr = array();
  170. if( !$translate ){
  171. return $states = $this->getSNMP()->walk1d($oid);
  172. }
  173. $states = $this->getSNMP()->realWalk($oid);
  174. foreach($states as $k => $v){
  175. $k_p= preg_split("|\.|",$k);
  176. $rtr[$k_p[14].".".$k_p[15]] = self::$FLOW_DIRECTIONS[$this->getSNMP()->parseSnmpValue($v)];
  177. }
  178. return $rtr;
  179. }
  180. public function docsQosCmtsIfIndex($mac=null){
  181. $rtr = array();
  182. if(!is_null($mac)){
  183. $oid = self::OID_docsQosCmtsIfIndex .'.'.$this->getDecMac($mac);
  184. }else{
  185. $oid = self::OID_docsQosCmtsIfIndex;
  186. }
  187. $ifIndex = $this->getSNMP()->realWalk($oid);
  188. foreach((array)$ifIndex as $k => $v){
  189. $k_prim = preg_split("|\.|",$k);
  190. if(!isset($k_prim[14]) OR !isset($k_prim[15]) OR !isset($k_prim[16]) OR !isset($k_prim[17]) OR !isset($k_prim[18]) OR !isset($k_prim[19])){
  191. continue;
  192. }
  193. $k_mac = sprintf("%02x:%02x:%02x:%02x:%02x:%02x",
  194. $k_prim[14], $k_prim[15], $k_prim[16], $k_prim[17], $k_prim[18], $k_prim[19]);
  195. if(!$mac)
  196. $rtr[$k_mac][] = $k_prim[20]; //$this->getSNMP()->parseSnmpValue($v);
  197. else
  198. $rtr[$k_mac][] =$this->getSNMP()->parseSnmpValue($v).".". $k_prim[20];
  199. }
  200. return $rtr;
  201. }
  202. public function docsQosServiceFlowOctets($ifId=null){
  203. if(!is_null($ifId)){
  204. $oid = self::OID_docsQosServiceFlowOctets ."." .$ifId;
  205. }else{
  206. $oid = self::OID_docsQosServiceFlowOctets;
  207. }
  208. $rtr = array();
  209. $stats = $this->getSNMP()->realWalk($oid);
  210. if(!is_array($stats)){
  211. return null;
  212. }
  213. foreach($stats as $k => $v){
  214. if($ifId){
  215. $k_prim = explode(".",$k);
  216. $rtr[ $k_prim[count($k_prim) - 2] . "." . $k_prim[count($k_prim) - 1]] = $this->getSNMP()->parseSnmpValue($v);
  217. }else{
  218. $k_prim = explode(".",$k);
  219. $rtr[$k_prim[count($k_prim) - 1]] = $this->getSNMP()->parseSnmpValue($v);
  220. }
  221. }
  222. return $rtr;
  223. }
  224. /**
  225. other(1)   Any state other than below.
  226. ranging(2)   The CMTS has received an Initial Ranging Request   message from the CM, and the ranging process is not  yet   complete.
  227. rangingAborted(3)   The CMTS has sent a Ranging Abort message to the CM.
  228. rangingComplete(4)   The CMTS has sent a Ranging Complete message to the CM.
  229. ipComplete(5)   The CMTS has received a DHCP reply message and forwarded   it to the CM.
  230. registrationComplete(6)   The CMTS has sent a Registration Response message to the CM.
  231. accessDenied(7)   The CMTS has sent a Registration Aborted message   to the CM.
  232. **/
  233. public function docsIfCmtsCmStatusMacAddress()
  234. {
  235. $rtr = $this->getSNMP()->walk1d(self::OID_docsIfCmtsCmStatusMacAddress);
  236. return $rtr;
  237. }
  238. //public function docsIfCmtsCmStatusIndex(){
  239. // return $this->getSNMP()->walk1d(self::OID_docsIfCmtsCmStatusDownChannelIfIndex);
  240. //}
  241. public function docsIfCmtsCmStatusUpChannelIfIndex(){
  242. return $this->getSNMP()->walk1d(self::OID_docsIfCmtsCmStatusUpChannelIfIndex);
  243. }
  244. public function docsIfCmtsCmStatusDownChannelIfIndex(){
  245. return $this->getSNMP()->walk1d(self::OID_docsIfCmtsCmStatusDownChannelIfIndex);
  246. }
  247. public function docsIfCmtsCmStatusIpAddress(){
  248. return $this->getSNMP()->walk1d(self::OID_docsIfCmtsCmStatusIpAddress);
  249. }
  250. public function docsIfCmtsCmStatusValue(){
  251. $rtr = $this->getSNMP()->walk1d(self::OID_docsIfCmtsCmStatusValue);
  252. $replace = array(1 => 'other' , 2 => 'ranging', 3 => 'rangingAborted', 4 => 'rangingComplete', 5 => 'ipComplete',
  253. 6 => 'registrationComplete', 7 => 'accessDenied');
  254. foreach($rtr as $k => $v){ $rtr[$k] = $replace[$v]; }
  255. return $rtr;
  256. }
  257. public function docsIfCmtsCmStatusRxPower(){
  258. $rtr = $this->getSNMP()->walk1d(self::OID_docsIfCmtsCmStatusRxPower);
  259. return $rtr;
  260. }
  261. public function docsIfCmStatusRxPower(){
  262. $rtr = $this->getSNMP()->walk1d(self::OID_docsIfCmStatusRxPower);
  263. return $rtr;
  264. }
  265. public function docsIfSigQSignalNoise(){
  266. $rtr = array();
  267. $data = $this->getSNMP()->realWalk(self::OID_docsIfSigQSignalNoise);
  268. foreach($data as $oid => $val){
  269. sscanf($val,"INTEGER: %f TenthdB", $readval);
  270. $rtr[substr($oid,strlen(self::OID_docsIfSigQSignalNoise)+2)] = $readval;
  271. }
  272. return $rtr;
  273. }
  274. public function docsIfSigQMicroreflections($trans = false){
  275. $oid = self::OID_docsIfSigQMicroreflections;
  276. $rtr = array();
  277. if($trans){
  278. foreach($this->getSNMP()->realWalk($oid) as $oid => $val){
  279. sscanf($val,"INTEGER: %f -dBc", $readval);
  280. $rtr[substr($oid,strlen(self::OID_docsIfSigQSignalNoise)+2)] = $readval;
  281. }
  282. return $rtr;
  283. }else{
  284. return $this->getSNMP()->walk1d(self::OID_docsIfSigQMicroreflections);
  285. }
  286. }
  287. public function docsIfCmtsChannelUtilization(){
  288. return $this->getSNMP()->realWalk(self::docsIfCmtsChannelUtilization);
  289. }
  290. public function docsIfCmStatusTxPower($decode=false){
  291. if(!$decode) return $this->getSNMP()->walk1d(self::OID_docsIfCmStatusTxPower);
  292. else{
  293. $rtr = array();
  294. foreach($this->getSNMP()->realWalk(self::OID_docsIfCmStatusTxPower) as $_oid => $val){
  295. $k = substr($_oid, strlen(self::OID_docsIfCmStatusTxPower)+2);
  296. $rtr[$k] = $this->getSNMP()->parseSnmpValue($val);
  297. }
  298. return $rtr;
  299. }
  300. }
  301. public function getCmStatus($index){
  302. $mibs = array(
  303. 'docsIfCmtsCmStatusMacAddress' => 'docsIfCmtsCmStatusMacAddress',
  304. 'docsIfCmtsCmStatusIpAddress' => 'docsIfCmtsCmStatusIpAddress',
  305. 'docsIfCmtsCmStatusDownChannelIfIndex' => 'docsIfCmtsCmStatusDownChannelIfIndex',
  306. 'docsIfCmtsCmStatusUpChannelIfIndex' => 'docsIfCmtsCmStatusUpChannelIfIndex',
  307. //'docsIfCmtsCmStatusRxPower' => '1.3.6.1.2.1.10.127.1.1.1.1.6',
  308. 'docsIfCmtsCmStatusValue' => 'docsIfCmtsCmStatusValue',
  309. 'docsIfCmtsCmStatusUnerroreds' => 'docsIfCmtsCmStatusUnerroreds',
  310. 'docsIfCmtsCmStatusCorrecteds' => 'docsIfCmtsCmStatusCorrecteds',
  311. 'docsIfCmtsCmStatusUncorrectables' => 'docsIfCmtsCmStatusUncorrectables',
  312. 'docsIfCmtsCmStatusSignalNoise' => 'docsIfCmtsCmStatusSignalNoise',
  313. 'docsIfCmtsCmStatusMicroreflections' => 'docsIfCmtsCmStatusMicroreflections',
  314. 'docsIfCmtsCmStatusDocsisRegMode' => 'docsIfCmtsCmStatusDocsisRegMode',
  315. 'docsIfCmtsCmStatusModulationType' => 'docsIfCmtsCmStatusModulationType',
  316. );
  317. foreach($mibs as $k=> $m){
  318. $m .= ".".$index;
  319. $rta = $this->getSNMP()->realWalk($m);
  320. if(!$rta) continue;
  321. $v = current($rta);
  322. $dds = strpos($v, ':');
  323. $v = substr($v, $dds+2);
  324. $rtr[$k] = $v;
  325. }
  326. return $rtr;
  327. }
  328. public function docsIfCmtsCmStatusSignalNoise(){
  329. $rtr = array();
  330. $data = $this->getSNMP()->realWalk(self::OID_docsIfCmtsCmStatusSignalNoise);
  331. foreach($data as $oid => $val){
  332. sscanf($val,"INTEGER: %f TenthdB", $readval);
  333. $rtr[substr($oid,strlen(self::OID_docsIfCmtsCmStatusSignalNoise)+2)] = $readval;
  334. }
  335. return $rtr;
  336. }
  337. }