DocsIfCmts.php 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522
  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. const OID_docsQosServiceFlowTimeActive = "1.3.6.1.2.1.10.127.7.1.4.1.4";
  32. const OID_docsQos3ServiceFlowTimeActive = "1.3.6.1.4.1.4491.2.1.21.1.4.1.4";
  33. const OID_docsQosParamSetMaxTrafficRate = "1.3.6.1.2.1.10.127.7.1.2.1.6";
  34. const OID_docsQos3ParamSetMaxTrafficRate = "1.3.6.1.4.1.4491.2.1.21.1.2.1.6";
  35. public function docsQosParamSetMaxTrafficRate() {
  36. try{
  37. $rtr = array();
  38. $oid = self::OID_docsQosParamSetMaxTrafficRate;
  39. foreach($this->getSNMP()->realWalk($oid) as $k => $v){
  40. $k_prim = preg_split("|\.|",$k);
  41. if ($k_prim[17] == 1) { // Solo activos
  42. $rtr[$k_prim[15].$k_prim[16]] = $this->getSNMP()->parseSnmpValue($v);
  43. }
  44. }
  45. return $rtr;
  46. } catch (\Exception $e) {
  47. echo "ouch! ".$e->getMessage()."\n";
  48. return array();
  49. }
  50. }
  51. public function docsQos3ParamSetMaxTrafficRate() {
  52. try{
  53. $rtr = array();
  54. $oid = self::OID_docsQos3ParamSetMaxTrafficRate;
  55. foreach($this->getSNMP()->realWalk($oid) as $k => $v){
  56. $k_prim = preg_split("|\.|",$k);
  57. if ($k_prim[16] == 1) { // solo activos
  58. $rtr[$k_prim[15].$k_prim[17]] = $this->getSNMP()->parseSnmpValue($v);
  59. }
  60. }
  61. return $rtr;
  62. } catch (\Exception $e) {
  63. echo "ouch! ".$e->getMessage()."\n";
  64. return array();
  65. }
  66. }
  67. public function docsIfUpChannelWidth(){
  68. return $this->getSNMP()->walk1d(self::OID_docsIfUpChannelWidth);
  69. }
  70. public function docsIfUPChannelFrequency(){
  71. return $this->getSNMP()->walk1d(self::OID_docsIfUpChannelFrequency);
  72. }
  73. public function docsIfDownChannelPower(){
  74. return $this->getSNMP()->walk1d(self::OID_docsIfDownChannelPower);
  75. }
  76. public function docsIfDownChannelModulation($decode = false){
  77. if(!$decode) {
  78. return $this->getSNMP()->walk1d(self::OID_docsIfDownChannelModulation);
  79. }else{
  80. $trans = array(1 => "unknown", 2 => "other", 3 => "qam64", 4 => "qam256");
  81. $rtr = array();
  82. foreach($this->getSNMP()->walk1d(self::OID_docsIfDownChannelModulation) as $if => $val){
  83. $rtr[$if] = $trans[$val];
  84. }
  85. return $rtr;
  86. }
  87. }
  88. public function docsIfDownChannelFrequency(){
  89. return $this->getSNMP()->walk1d(self::OID_docsIfDownChannelFrequency);
  90. }
  91. public function docsIfCmtsCmPtr(){
  92. $ptr = array();
  93. foreach($this->getSNMP()->realWalk(self::OID_docsIfCmtsCmPtr) as $key => $val){
  94. $mac =implode('',array_map(function($x) { return sprintf("%02x", $x);}, array_slice(explode(".",$key),14,6)));
  95. $ptr[$mac] = $this->getSNMP()->parseSnmpValue($val);
  96. }
  97. return $ptr;
  98. }
  99. public function ipNetToMediaPhysAddress(){
  100. $rtr = array();
  101. foreach($this->getSNMP()->realWalk(self::OID_ipNetToMediaPhysAddress) as $k => $m){
  102. ////tring(40) ".1.3.6.1.2.1.4.22.1.2.2000001.10.14.8.69"
  103. //string(23) "STRING: 0:c:e5:7d:93:d0"
  104. ////
  105. $karray = preg_split("|\.|",$k);
  106. $mac = preg_split("|:|", trim(substr($m,8)));
  107. $mac = sprintf("%02x:%02x:%02x:%02x:%02x:%02x",$mac[0], $mac[1], $mac[2], $mac[3], $mac[4], $mac[5]);
  108. $l_ke = count($karray);
  109. $rtr[$mac] = sprintf("%d.%d.%d.%d",$karray[$l_ke - 4],$karray[$l_ke - 3], $karray[$l_ke - 2], $karray[$l_ke-1]);
  110. }
  111. return $rtr;
  112. }
  113. public function docsQos3ServiceFlowDirection($translate=false){
  114. $rtr = array();
  115. $oid = self::OID_docsQos3ServiceFlowDirection;
  116. $stats = $this->getSNMP()->realWalk($oid);
  117. foreach((array)$stats as $k => $v){
  118. $k_prim = preg_split("|\.|",$k);
  119. //$dds = strpos($v, ':');
  120. if(!isset($k_prim[15])){
  121. continue;
  122. }
  123. $rtr[$k_prim[15].".".$k_prim[16]] = $this->getSNMP()->parseSnmpValue($v);
  124. }
  125. if( !$translate )
  126. return $rtr;
  127. return $this->getSNMP()->translate( $rtr, self::$FLOW_DIRECTIONS);
  128. }
  129. public function docsQos3ServiceFlowDirectionX($translate=false, $id=null){
  130. $rtr = array();
  131. if(is_null($id)) $oid = self::OID_docsQos3ServiceFlowDirection;
  132. else $oid = self::OID_docsQos3ServiceFlowDirection. "." .$id;
  133. $stats = $this->getSNMP()->realWalk($oid);
  134. foreach((array)$stats as $k => $v){
  135. $k_prim = preg_split("|\.|",$k);
  136. //$dds = strpos($v, ':');
  137. if(!isset($k_prim[15])){
  138. break;
  139. }
  140. $rtr[$k_prim[15].".".$k_prim[16]] = $this->getSNMP()->parseSnmpValue($v);
  141. }
  142. if( !$translate )
  143. return $rtr;
  144. return $this->getSNMP()->translate( $rtr, self::$FLOW_DIRECTIONS);
  145. }
  146. private function getDecMac($mac){
  147. 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);
  148. unset($matches[0]);
  149. return implode('.', array_map('hexdec', $matches));
  150. }
  151. public function docsQos3CmtsIfIndex($mac=null){
  152. $rtr = array();
  153. if(!is_null($mac)){
  154. $oid = self::OID_docsQos3CmtsIfIndex .'.'.$this->getDecMac($mac);
  155. }else{
  156. $oid = self::OID_docsQos3CmtsIfIndex;
  157. }
  158. foreach((array)$this->getSNMP()->realWalk($oid) as $k => $v){
  159. $k_prim = preg_split("|\.|",$k);
  160. if(count($k_prim) < 20){
  161. continue;
  162. }
  163. $k_mac = sprintf("%02x:%02x:%02x:%02x:%02x:%02x",
  164. $k_prim[15], $k_prim[16], $k_prim[17], $k_prim[18], $k_prim[19], $k_prim[20]);
  165. $rtr[$k_mac][] = $this->getSNMP()->parseSnmpValue($v). ".".$k_prim[21];
  166. }
  167. return $rtr;
  168. }
  169. public function docsQos3ServiceFlowOctets($ifId=null){
  170. try{
  171. $rtr = array();
  172. if(!is_null($ifId)){
  173. $oid = self::OID_docsQos3ServiceFlowOctets ."." .$ifId;
  174. }else{
  175. $oid = self::OID_docsQos3ServiceFlowOctets;
  176. }
  177. foreach($this->getSNMP()->realWalk($oid) as $k => $v){
  178. $k_prim = preg_split("|\.|",$k);
  179. $rtr[$k_prim[15].".".$k_prim[16]] = $this->getSNMP()->parseSnmpValue($v);
  180. }
  181. return $rtr;
  182. }catch (\Exception $e){
  183. echo "ouch! ".$e->getMessage()."\n";
  184. return array();
  185. }
  186. }
  187. public static $FLOW_DIRECTIONS = array(1 => "downstream", 2 => 'upstream');
  188. public function docsQosServiceFlowDirection($translate=false){
  189. $oid = self::OID_docsQosServiceFlowDirection;
  190. $states = $this->getSNMP()->realWalk($oid);
  191. if(!is_array($states)) return null;
  192. foreach($states as $k => $v){
  193. $oid_arr = explode(".", $k);
  194. $states[$oid_arr[count($oid_arr) -1]] = $this->getSNMP()->parseSnmpValue($v);
  195. unset($states[$k]);
  196. }
  197. $rtr = array();
  198. if( !$translate )
  199. return $states;
  200. return $this->getSNMP()->translate( $states, self::$FLOW_DIRECTIONS);
  201. }
  202. public function docsQosServiceFlowDirectionX($translate=false, $id=null){
  203. if(is_null($id)) $oid = self::OID_docsQosServiceFlowDirection;
  204. else $oid = self::OID_docsQosServiceFlowDirection. "." .$id;
  205. $rtr = array();
  206. if( !$translate ){
  207. return $states = $this->getSNMP()->walk1d($oid);
  208. }
  209. $states = $this->getSNMP()->realWalk($oid);
  210. foreach($states as $k => $v){
  211. $k_p= preg_split("|\.|",$k);
  212. $rtr[$k_p[14].".".$k_p[15]] = self::$FLOW_DIRECTIONS[$this->getSNMP()->parseSnmpValue($v)];
  213. }
  214. return $rtr;
  215. }
  216. public function docsQosCmtsIfIndex($mac=null){
  217. $rtr = array();
  218. if(!is_null($mac)){
  219. $oid = self::OID_docsQosCmtsIfIndex .'.'.$this->getDecMac($mac);
  220. }else{
  221. $oid = self::OID_docsQosCmtsIfIndex;
  222. }
  223. $ifIndex = $this->getSNMP()->realWalk($oid);
  224. foreach((array)$ifIndex as $k => $v){
  225. $k_prim = preg_split("|\.|",$k);
  226. 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])){
  227. continue;
  228. }
  229. $k_mac = sprintf("%02x:%02x:%02x:%02x:%02x:%02x",
  230. $k_prim[14], $k_prim[15], $k_prim[16], $k_prim[17], $k_prim[18], $k_prim[19]);
  231. if(!$mac)
  232. $rtr[$k_mac][] = $k_prim[20]; //$this->getSNMP()->parseSnmpValue($v);
  233. else
  234. $rtr[$k_mac][] =$this->getSNMP()->parseSnmpValue($v).".". $k_prim[20];
  235. }
  236. return $rtr;
  237. }
  238. public function docsQosServiceFlowOctets($ifId=null){
  239. if(!is_null($ifId)){
  240. $oid = self::OID_docsQosServiceFlowOctets ."." .$ifId;
  241. }else{
  242. $oid = self::OID_docsQosServiceFlowOctets;
  243. }
  244. $rtr = array();
  245. $stats = $this->getSNMP()->realWalk($oid);
  246. if(!is_array($stats)){
  247. return null;
  248. }
  249. foreach($stats as $k => $v){
  250. if($ifId){
  251. $k_prim = explode(".",$k);
  252. $rtr[ $k_prim[count($k_prim) - 2] . "." . $k_prim[count($k_prim) - 1]] = $this->getSNMP()->parseSnmpValue($v);
  253. }else{
  254. $k_prim = explode(".",$k);
  255. $rtr[$k_prim[count($k_prim) - 1]] = $this->getSNMP()->parseSnmpValue($v);
  256. }
  257. }
  258. return $rtr;
  259. }
  260. /**
  261. other(1)   Any state other than below.
  262. ranging(2)   The CMTS has received an Initial Ranging Request   message from the CM, and the ranging process is not  yet   complete.
  263. rangingAborted(3)   The CMTS has sent a Ranging Abort message to the CM.
  264. rangingComplete(4)   The CMTS has sent a Ranging Complete message to the CM.
  265. ipComplete(5)   The CMTS has received a DHCP reply message and forwarded   it to the CM.
  266. registrationComplete(6)   The CMTS has sent a Registration Response message to the CM.
  267. accessDenied(7)   The CMTS has sent a Registration Aborted message   to the CM.
  268. **/
  269. public function docsIfCmtsCmStatusMacAddress()
  270. {
  271. $rtr = $this->getSNMP()->walk1d(self::OID_docsIfCmtsCmStatusMacAddress);
  272. return $rtr;
  273. }
  274. //public function docsIfCmtsCmStatusIndex(){
  275. // return $this->getSNMP()->walk1d(self::OID_docsIfCmtsCmStatusDownChannelIfIndex);
  276. //}
  277. public function docsIfCmtsCmStatusUpChannelIfIndex(){
  278. return $this->getSNMP()->walk1d(self::OID_docsIfCmtsCmStatusUpChannelIfIndex);
  279. }
  280. public function docsIfCmtsCmStatusDownChannelIfIndex(){
  281. return $this->getSNMP()->walk1d(self::OID_docsIfCmtsCmStatusDownChannelIfIndex);
  282. }
  283. public function docsIfCmtsCmStatusIpAddress(){
  284. return $this->getSNMP()->walk1d(self::OID_docsIfCmtsCmStatusIpAddress);
  285. }
  286. public function docsIfCmtsCmStatusValue(){
  287. $rtr = $this->getSNMP()->walk1d(self::OID_docsIfCmtsCmStatusValue);
  288. $replace = array(1 => 'other' , 2 => 'ranging', 3 => 'rangingAborted', 4 => 'rangingComplete', 5 => 'ipComplete',
  289. 6 => 'registrationComplete', 7 => 'accessDenied');
  290. foreach($rtr as $k => $v){ if(isset($replace[$v])) {$rtr[$k] = $replace[$v];} }
  291. return $rtr;
  292. }
  293. public function docsIfCmtsCmStatusRxPower(){
  294. $rtr = $this->getSNMP()->walk1d(self::OID_docsIfCmtsCmStatusRxPower);
  295. return $rtr;
  296. }
  297. public function docsIfCmStatusRxPower(){
  298. $rtr = $this->getSNMP()->walk1d(self::OID_docsIfCmStatusRxPower);
  299. return $rtr;
  300. }
  301. public function docsIfSigQSignalNoise(){
  302. $rtr = array();
  303. $data = $this->getSNMP()->realWalk(self::OID_docsIfSigQSignalNoise);
  304. if($data) foreach($data as $oid => $val){
  305. sscanf($val,"INTEGER: %f TenthdB", $readval);
  306. $rtr[substr($oid,strlen(self::OID_docsIfSigQSignalNoise)+2)] = $readval;
  307. }
  308. return $rtr;
  309. }
  310. public function docsIfSigQMicroreflections($trans = false){
  311. $oid = self::OID_docsIfSigQMicroreflections;
  312. $rtr = array();
  313. if($trans){
  314. $data = $this->getSNMP()->realWalk($oid);
  315. if($data) foreach($data as $oid => $val){
  316. sscanf($val,"INTEGER: %f -dBc", $readval);
  317. $rtr[substr($oid,strlen(self::OID_docsIfSigQSignalNoise)+2)] = $readval;
  318. }
  319. return $rtr;
  320. }else{
  321. return $this->getSNMP()->walk1d(self::OID_docsIfSigQMicroreflections);
  322. }
  323. }
  324. public function docsIfCmtsChannelUtilization(){
  325. return $this->getSNMP()->realWalk(self::docsIfCmtsChannelUtilization);
  326. }
  327. public function docsIfCmStatusTxPower($decode=false){
  328. if(!$decode) return $this->getSNMP()->walk1d(self::OID_docsIfCmStatusTxPower);
  329. else{
  330. $rtr = array();
  331. foreach($this->getSNMP()->realWalk(self::OID_docsIfCmStatusTxPower) as $_oid => $val){
  332. $k = substr($_oid, strlen(self::OID_docsIfCmStatusTxPower)+2);
  333. $rtr[$k] = $this->getSNMP()->parseSnmpValue($val);
  334. }
  335. return $rtr;
  336. }
  337. }
  338. public function getCmStatus($index){
  339. $mibs = array(
  340. 'docsIfCmtsCmStatusMacAddress' => 'docsIfCmtsCmStatusMacAddress',
  341. 'docsIfCmtsCmStatusIpAddress' => 'docsIfCmtsCmStatusIpAddress',
  342. 'docsIfCmtsCmStatusDownChannelIfIndex' => 'docsIfCmtsCmStatusDownChannelIfIndex',
  343. 'docsIfCmtsCmStatusUpChannelIfIndex' => 'docsIfCmtsCmStatusUpChannelIfIndex',
  344. //'docsIfCmtsCmStatusRxPower' => '1.3.6.1.2.1.10.127.1.1.1.1.6',
  345. 'docsIfCmtsCmStatusValue' => 'docsIfCmtsCmStatusValue',
  346. 'docsIfCmtsCmStatusUnerroreds' => 'docsIfCmtsCmStatusUnerroreds',
  347. 'docsIfCmtsCmStatusCorrecteds' => 'docsIfCmtsCmStatusCorrecteds',
  348. 'docsIfCmtsCmStatusUncorrectables' => 'docsIfCmtsCmStatusUncorrectables',
  349. 'docsIfCmtsCmStatusSignalNoise' => 'docsIfCmtsCmStatusSignalNoise',
  350. 'docsIfCmtsCmStatusMicroreflections' => 'docsIfCmtsCmStatusMicroreflections',
  351. 'docsIfCmtsCmStatusDocsisRegMode' => 'docsIfCmtsCmStatusDocsisRegMode',
  352. 'docsIfCmtsCmStatusModulationType' => 'docsIfCmtsCmStatusModulationType',
  353. );
  354. foreach($mibs as $k=> $m){
  355. $m .= ".".$index;
  356. $rta = $this->getSNMP()->realWalk($m);
  357. if(!$rta) continue;
  358. $v = current($rta);
  359. $dds = strpos($v, ':');
  360. $v = substr($v, $dds+2);
  361. $rtr[$k] = $v;
  362. }
  363. return $rtr;
  364. }
  365. public function docsIfCmtsCmStatusSignalNoise(){
  366. $rtr = array();
  367. $data = $this->getSNMP()->realWalk(self::OID_docsIfCmtsCmStatusSignalNoise);
  368. foreach($data as $oid => $val){
  369. sscanf($val,"INTEGER: %f TenthdB", $readval);
  370. $rtr[substr($oid,strlen(self::OID_docsIfCmtsCmStatusSignalNoise)+2)] = $readval;
  371. }
  372. return $rtr;
  373. }
  374. public function docsQos3ServiceFlowTimeActive($ifId = null) {
  375. try {
  376. $rtr = array();
  377. if (!is_null($ifId)) {
  378. $oid = self::OID_docsQos3ServiceFlowTimeActive . "." . $ifId;
  379. } else {
  380. $oid = self::OID_docsQos3ServiceFlowTimeActive;
  381. }
  382. foreach ($this->getSNMP()->realWalk($oid) as $k => $v) {
  383. $k_prim = preg_split("|\.|", $k);
  384. $rtr[$k_prim[15] . "." . $k_prim[16]] = $this->getSNMP()->parseSnmpValue($v);
  385. }
  386. return $rtr;
  387. } catch (\Exception $e) {
  388. echo "ouch! " . $e->getMessage() . "\n";
  389. return array();
  390. }
  391. }
  392. public function docsQosServiceFlowTimeActive($ifId = null) {
  393. if (!is_null($ifId)) {
  394. $oid = self::OID_docsQosServiceFlowTimeActive . "." . $ifId;
  395. } else {
  396. $oid = self::OID_docsQosServiceFlowTimeActive;
  397. }
  398. $rtr = array();
  399. $stats = $this->getSNMP()->realWalk($oid);
  400. if (!is_array($stats)) {
  401. return null;
  402. }
  403. foreach ($stats as $k => $v) {
  404. if ($ifId) {
  405. $k_prim = explode(".", $k);
  406. $rtr[$k_prim[count($k_prim) - 2] . "." . $k_prim[count($k_prim) - 1]] = $this->getSNMP()->parseSnmpValue($v);
  407. } else {
  408. $k_prim = explode(".", $k);
  409. $rtr[$k_prim[count($k_prim) - 1]] = $this->getSNMP()->parseSnmpValue($v);
  410. }
  411. }
  412. return $rtr;
  413. }
  414. public function docsQosServiceFlowOctetsRealValues($ifId=null){
  415. try{
  416. if(!is_null($ifId)){
  417. $oid = self::OID_docsQosServiceFlowOctets ."." .$ifId;
  418. }else{
  419. $oid = self::OID_docsQosServiceFlowOctets;
  420. }
  421. $stats = $this->getSNMP()->realWalk($oid);
  422. if(!is_array($stats)){return array();}
  423. return $stats;
  424. }catch (\Exception $e){
  425. echo "ouch! ".$e->getMessage()."\n";
  426. return array();
  427. }
  428. }
  429. public function docsQos3ServiceFlowOctetsRealValues($ifId=null){
  430. try{
  431. if(!is_null($ifId)){
  432. $oid = self::OID_docsQos3ServiceFlowOctets ."." .$ifId;
  433. }else{
  434. $oid = self::OID_docsQos3ServiceFlowOctets;
  435. }
  436. $stats = $this->getSNMP()->realWalk($oid);
  437. if(!is_array($stats)){return array();}
  438. return $stats;
  439. }catch (\Exception $e){
  440. echo "ouch! ".$e->getMessage()."\n";
  441. return array();
  442. }
  443. }
  444. }