-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDocsismodem.php
123 lines (110 loc) · 3.01 KB
/
Docsismodem.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
<?php
/**
* Description of Docsismodem
*
* @author andref
*/
class DM_Model_Docsismodem
{
/**
*
* @var DM__Model_Docsismodems
*/
protected $_table;
protected $_data = array(
'macaddr' => '',
'config_file' => '',
'ipaddress' => '',
'estado' => '',
'serialnum' => '',
'ipaddr' => '',
'idmodelo' => '',
'first_online' => '',
'last_online' => '',
'reg_count' => '',
'cmts_vlan' => '',
'id_aparelho' => '',
'id_servico' => '',
'subnum' => '',
'ipaton' => '',
'idmarca' => '',
'nome' => '',
'descricao' => '',
'vendormac' => ''
);
protected $RemoteQuery;
protected $OnlineReg;
/**
* Do a remote query on a cable modem
*
* @param string $community
* @return Array
*/
public function remoteQuery($community = 'public')
{
if (empty($this->macaddr) || empty($this->ipaddr)) {
return null;
}
$ip = str_replace("0.0.", "10.1.", $this->ipaddr);
$this->RemoteQuery['ip'] = $ip;
$this->RemoteQuery['community'] = $community;
$this->RemoteQuery['tx'] = $this->getTX();
$this->RemoteQuery['snr'] = $this->getSNR();
$this->RemoteQuery['rx'] = $this->getRX();
$this->RemoteQuery['version'] = $this->getFirmwareVersion();
return $this->RemoteQuery;
}
/**
* Get TX signal values
*
* @return double
*/
private function getTX()
{
return $this->getRemote($this->RemoteQuery['ip'], ".1.3.6.1.2.1.10.127.1.2.2.1.3.2", $this->RemoteQuery['community']);
}
/**
* Get RX signal values
*
* @return double
*/
private function getRX()
{
return $this->getRemote($this->RemoteQuery['ip'], ".1.3.6.1.2.1.10.127.1.1.1.1.6.3", $this->RemoteQuery['community']);
}
/**
* Get SNR
*
* @return double
*/
private function getSNR()
{
return $this->getRemote($this->RemoteQuery['ip'], ".1.3.6.1.2.1.10.127.1.1.4.1.5.3", $this->RemoteQuery['community']);
}
/**
* Get firmware version and CM info description
* @return String
*/
private function getFirmwareVersion()
{
return $this->getRemote($this->RemoteQuery['ip'], "SNMPv2-MIB::sysDescr.0", $this->RemoteQuery['community'], "STRING:");
}
/**
* Executes the remote query
*
* @param string $ipaddr IP Address of CM
* @param string $oid OID
* @param String community
* @param string $exp Specific separator returned from snmpget to use for str split
*
* @return String|null Null on error
*/
private function getRemote($ipaddr, $oid, $community, $exp = ":")
{
$tmp = explode( $exp, snmpget($ipaddr, $community,$oid));
if (!array($tmp)) {
return null;
}
return $tmp[1];
}
}