summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--application/agent/agent++/agentgen/agent/include/nscrtv_eponeoc_common_mib.h66
-rw-r--r--application/agent/agent++/agentgen/agent/src/nscrtv_eponeoc_common_mib.cpp260
-rwxr-xr-xapplication/agent/inc/mib-common.h4
-rwxr-xr-xapplication/agent/inc/systemmanager.h14
-rwxr-xr-xapplication/agent/inc/underlayer.h8
-rw-r--r--application/agent/mibs/EOC-MIB.txt15
-rw-r--r--application/agent/src/SystemManager.cpp178
-rw-r--r--application/agent/src/Underlayer.cpp83
-rw-r--r--application/smm/smm-server/src/smm_req.c11
-rw-r--r--application/spidlib/inc/services.h2
-rwxr-xr-xapplication/spidlib/test/scripts/snmp.sh1
-rw-r--r--package/initramfs/root/factory/config/snmp.conf1
-rw-r--r--package/initramfs/root/factory/snmp.conf2
-rw-r--r--tools/flashfs/image/etc/config/snmp.conf1
-rw-r--r--tools/flashfs/image/etc/snmp.conf2
15 files changed, 595 insertions, 53 deletions
diff --git a/application/agent/agent++/agentgen/agent/include/nscrtv_eponeoc_common_mib.h b/application/agent/agent++/agentgen/agent/include/nscrtv_eponeoc_common_mib.h
index 3abc0f0005..803e5a2d40 100644
--- a/application/agent/agent++/agentgen/agent/include/nscrtv_eponeoc_common_mib.h
+++ b/application/agent/agent++/agentgen/agent/include/nscrtv_eponeoc_common_mib.h
@@ -36,6 +36,8 @@
#define oidCommonAdminResetCause "1.3.6.1.4.1.17409.2.2.3.1.3.6.0"
#define oidCommonAdminStatus "1.3.6.1.4.1.17409.2.2.3.1.3.7.0"
#define oidCommonAdminVarBindings "1.3.6.1.4.1.17409.2.2.3.1.4.1.0"
+#define oidCommonAdminConfigurationSaving "1.3.6.1.4.1.17409.2.2.3.1.4.2.0"
+#define oidCommonAdminConfigurationResult "1.3.6.1.4.1.17409.2.2.3.1.4.3.0"
#define oidCommonAdminLinkTopoChange "1.3.6.1.4.1.17409.2.2.3.1.5.1.0"
#define oidCommonAdminAppropriativeOID "1.3.6.1.4.1.17409.2.2.3.1.5.2.0"
#define oidCommonRFLinkMaximum "1.3.6.1.4.1.17409.2.2.3.2.1.0"
@@ -989,6 +991,70 @@ public:
/**
+ * commonAdminConfigurationSaving
+ *
+ * ""
+ */
+
+class commonAdminConfigurationSaving: public MibLeaf
+{
+
+public:
+ commonAdminConfigurationSaving();
+ virtual ~commonAdminConfigurationSaving();
+
+ static commonAdminConfigurationSaving* instance;
+
+ virtual void get_request(Request*, int);
+ virtual long get_state();
+ virtual void set_state(long);
+ virtual int set(const Vbx&);
+ virtual int prepare_set_request(Request*, int&);
+ virtual int commit_set_request(Request*, int);
+ virtual void cleanup_set_request(Request*, int&);
+ virtual int undo_set_request(Request*, int&);
+ virtual boolean value_ok(const Vbx&);
+ enum labels {
+ e_true = 1,
+ e_false = 2 };
+
+//--AgentGen BEGIN=commonAdminConfigurationSaving
+//--AgentGen END
+};
+
+
+
+
+/**
+ * commonAdminConfigurationResult
+ *
+ * ""
+ */
+
+class commonAdminConfigurationResult: public MibLeaf
+{
+
+public:
+ commonAdminConfigurationResult();
+ virtual ~commonAdminConfigurationResult();
+
+ static commonAdminConfigurationResult* instance;
+
+ virtual void get_request(Request*, int);
+ virtual long get_state();
+ virtual void set_state(long);
+ enum labels {
+ e_true = 1,
+ e_false = 2 };
+
+//--AgentGen BEGIN=commonAdminConfigurationResult
+//--AgentGen END
+};
+
+
+
+
+/**
* commonAdminLinkTopoChange
*
* ""
diff --git a/application/agent/agent++/agentgen/agent/src/nscrtv_eponeoc_common_mib.cpp b/application/agent/agent++/agentgen/agent/src/nscrtv_eponeoc_common_mib.cpp
index 8e123edb02..d1a4cd0057 100644
--- a/application/agent/agent++/agentgen/agent/src/nscrtv_eponeoc_common_mib.cpp
+++ b/application/agent/agent++/agentgen/agent/src/nscrtv_eponeoc_common_mib.cpp
@@ -718,15 +718,15 @@ commonAdminIPAddress::~commonAdminIPAddress()
void commonAdminIPAddress::get_request(Request* req, int ind)
{
//--AgentGen BEGIN=commonAdminIPAddress::get_request
- char getValue[16];
- if (0 != SystemManager::instance()->getAdminIpAddress(getValue, _DEFAULT_SNMP_ETHER_IF_INDEX))
- {
- set_state(IpAddress("0.0.0.0"));
- }
- else
- {
- set_state(IpAddress(getValue));
- }
+ char * getValue = NULL;
+ if (0 != SystemManager::instance()->getAdminIpAddress(&getValue, _DEFAULT_SNMP_ETHER_IF_INDEX))
+ {
+ set_state(IpAddress("0.0.0.0"));
+ }
+ else if (NULL != getValue)
+ {
+ set_state(IpAddress(getValue));
+ }
//--AgentGen END
MibLeaf::get_request(req, ind);
}
@@ -747,15 +747,15 @@ void commonAdminIPAddress::set_state(const IpAddress& s)
int commonAdminIPAddress::set(const Vbx& vb)
{
//--AgentGen BEGIN=commonAdminIPAddress::set
- IpAddress setValue = 0;
- vb.get_value(setValue);
- if (get_state() != setValue)
- {
- if (0 != SystemManager::instance()->setAdminIpAddress((char *)setValue.get_printable(), _DEFAULT_SNMP_ETHER_IF_INDEX))
+ IpAddress setValue = 0;
+ vb.get_value(setValue);
+ if (get_state() != setValue)
{
- return SNMP_ERROR_RESOURCE_UNAVAIL;
+ if (0 != SystemManager::instance()->setAdminIpAddress((char *)setValue.get_printable(), _DEFAULT_SNMP_ETHER_IF_INDEX))
+ {
+ return SNMP_ERROR_RESOURCE_UNAVAIL;
+ }
}
- }
//--AgentGen END
return MibLeaf::set(vb);
}
@@ -834,12 +834,12 @@ commonAdminIPMask::~commonAdminIPMask()
void commonAdminIPMask::get_request(Request* req, int ind)
{
//--AgentGen BEGIN=commonAdminIPMask::get_request
- char getValue[16];
- if (0 != SystemManager::instance()->getAdminIpMask(getValue, _DEFAULT_SNMP_BRIDGE_IF_INDEX))
+ char * getValue = NULL;
+ if (0 != SystemManager::instance()->getAdminIpMask(&getValue, _DEFAULT_SNMP_BRIDGE_IF_INDEX))
{
set_state(IpAddress("0.0.0.0"));
}
- else
+ else if (NULL != getValue)
{
set_state(IpAddress(getValue));
}
@@ -950,12 +950,12 @@ commonAdminIPGateway::~commonAdminIPGateway()
void commonAdminIPGateway::get_request(Request* req, int ind)
{
//--AgentGen BEGIN=commonAdminIPGateway::get_request
- char getValue[16];
- if (0 != SystemManager::instance()->getAdminIpGateway(getValue, _DEFAULT_SNMP_BRIDGE_IF_INDEX))
+ char * getValue = NULL;
+ if (0 != SystemManager::instance()->getAdminIpGateway(&getValue, _DEFAULT_SNMP_BRIDGE_IF_INDEX))
{
set_state(IpAddress("0.0.0.0"));
}
- else
+ else if (NULL != getValue)
{
set_state(IpAddress(getValue));
}
@@ -1066,12 +1066,12 @@ commonAdminLinkDeviceIPAddress::~commonAdminLinkDeviceIPAddress()
void commonAdminLinkDeviceIPAddress::get_request(Request* req, int ind)
{
//--AgentGen BEGIN=commonAdminLinkDeviceIPAddress::get_request
- char getValue[16];
- if (0 != SystemManager::instance()->getAdminIpAddress(getValue, _DEFAULT_SNMP_BRIDGE_IF_INDEX))
+ char * getValue = NULL;
+ if (0 != SystemManager::instance()->getAdminIpAddress(&getValue, _DEFAULT_SNMP_BRIDGE_IF_INDEX))
{
set_state(IpAddress("0.0.0.0"));
}
- else
+ else if (NULL != getValue)
{
set_state(IpAddress(getValue));
}
@@ -1905,6 +1905,164 @@ void commonAdminVarBindings::set_state(long l)
/**
+ * commonAdminConfigurationSaving
+ *
+ * ""
+ */
+
+commonAdminConfigurationSaving* commonAdminConfigurationSaving::instance = 0;
+
+
+commonAdminConfigurationSaving::commonAdminConfigurationSaving():
+ MibLeaf(oidCommonAdminConfigurationSaving, READWRITE, new SnmpInt32()){
+ // This leaf object is a singleton. In order to access it use
+ // the static pointer commonAdminConfigurationSaving::instance.
+ instance = this;
+ //--AgentGen BEGIN=commonAdminConfigurationSaving::commonAdminConfigurationSaving
+ //--AgentGen END
+
+}
+
+commonAdminConfigurationSaving::~commonAdminConfigurationSaving()
+{
+
+ //--AgentGen BEGIN=commonAdminConfigurationSaving::~commonAdminConfigurationSaving
+ //--AgentGen END
+}
+
+void commonAdminConfigurationSaving::get_request(Request* req, int ind)
+{
+ //--AgentGen BEGIN=commonAdminConfigurationSaving::get_request
+ //--AgentGen END
+ MibLeaf::get_request(req, ind);
+}
+
+long commonAdminConfigurationSaving::get_state()
+{
+ //--AgentGen BEGIN=commonAdminConfigurationSaving::get_state
+ //--AgentGen END
+ return (long)*((SnmpInt32*)value);
+}
+
+void commonAdminConfigurationSaving::set_state(long l)
+{
+ //--AgentGen BEGIN=commonAdminConfigurationSaving::set_state
+ //--AgentGen END
+ *((SnmpInt32*)value) = l;
+}
+
+
+int commonAdminConfigurationSaving::set(const Vbx& vb)
+{
+ //--AgentGen BEGIN=commonAdminConfigurationSaving::set
+ //--AgentGen END
+ return MibLeaf::set(vb);
+}
+
+int commonAdminConfigurationSaving::commit_set_request(Request* req, int ind)
+{
+ //--AgentGen BEGIN=commonAdminConfigurationSaving::commit_set_request
+ //--AgentGen END
+ return MibLeaf::commit_set_request(req, ind);
+}
+
+void commonAdminConfigurationSaving::cleanup_set_request(Request* req, int& ind)
+{
+ //--AgentGen BEGIN=commonAdminConfigurationSaving::cleanup_set_request
+ //--AgentGen END
+ MibLeaf::cleanup_set_request(req, ind);
+}
+
+int commonAdminConfigurationSaving::undo_set_request(Request* req, int& ind)
+{
+ //--AgentGen BEGIN=commonAdminConfigurationSaving::undo_set_request
+ //--AgentGen END
+ return MibLeaf::undo_set_request(req, ind);
+}
+
+boolean commonAdminConfigurationSaving::value_ok(const Vbx& vb)
+{
+ long v;
+ vb.get_value(v);
+ if ((v != 1)
+ && (v != 2)) return FALSE;
+ //--AgentGen BEGIN=commonAdminConfigurationSaving::value_ok
+ //--AgentGen END
+ return TRUE;
+}
+
+int commonAdminConfigurationSaving::prepare_set_request(Request* req, int& ind)
+{
+ int status;
+ if ((status = MibLeaf::prepare_set_request(req, ind)) !=
+ SNMP_ERROR_SUCCESS) return status;
+
+ //--AgentGen BEGIN=commonAdminConfigurationSaving::prepare_set_request
+ //--AgentGen END
+ return SNMP_ERROR_SUCCESS;
+}
+
+//--AgentGen BEGIN=commonAdminConfigurationSaving
+//--AgentGen END
+
+
+
+
+/**
+ * commonAdminConfigurationResult
+ *
+ * ""
+ */
+
+commonAdminConfigurationResult* commonAdminConfigurationResult::instance = 0;
+
+
+commonAdminConfigurationResult::commonAdminConfigurationResult():
+ MibLeaf(oidCommonAdminConfigurationResult, READONLY, new SnmpInt32()){
+ // This leaf object is a singleton. In order to access it use
+ // the static pointer commonAdminConfigurationResult::instance.
+ instance = this;
+ //--AgentGen BEGIN=commonAdminConfigurationResult::commonAdminConfigurationResult
+ //--AgentGen END
+
+}
+
+commonAdminConfigurationResult::~commonAdminConfigurationResult()
+{
+
+ //--AgentGen BEGIN=commonAdminConfigurationResult::~commonAdminConfigurationResult
+ //--AgentGen END
+}
+
+void commonAdminConfigurationResult::get_request(Request* req, int ind)
+{
+ //--AgentGen BEGIN=commonAdminConfigurationResult::get_request
+ //--AgentGen END
+ MibLeaf::get_request(req, ind);
+}
+
+long commonAdminConfigurationResult::get_state()
+{
+ //--AgentGen BEGIN=commonAdminConfigurationResult::get_state
+ //--AgentGen END
+ return (long)*((SnmpInt32*)value);
+}
+
+void commonAdminConfigurationResult::set_state(long l)
+{
+ //--AgentGen BEGIN=commonAdminConfigurationResult::set_state
+ //--AgentGen END
+ *((SnmpInt32*)value) = l;
+}
+
+
+//--AgentGen BEGIN=commonAdminConfigurationResult
+//--AgentGen END
+
+
+
+
+/**
* commonAdminLinkTopoChange
*
* ""
@@ -3586,7 +3744,7 @@ boolean commonSoftwareFTPServerPort::value_ok(const Vbx& vb)
{
return FALSE;
}
- //--AgentGen END
+ //--AgentGen END
return TRUE;
}
@@ -4556,11 +4714,11 @@ void commonOnlineAllExtMACLimitation::set_state(long l)
int commonOnlineAllExtMACLimitation::set(const Vbx& vb)
{
//--AgentGen BEGIN=commonOnlineAllExtMACLimitation::set
- long setValue;
+ int setValue;
vb.get_value(setValue);
if (get_state() != setValue)
{
- if (0 != SystemManager::instance()->setMacLimit(setValue))
+ if (0 != SystemManager::instance()->setMacLimit((unsigned int)setValue))
{
return SNMP_ERROR_NO_ACCESS;
}
@@ -6785,7 +6943,7 @@ boolean commonMACVlanUplinkID::value_ok(const Vbx& vb)
vb.get_value(v);
if ((v < SPIDLIB_VLAN_MIN_ID)
|| (v > SPIDLIB_VLAN_MAX_ID)) return FALSE;
- //--AgentGen END
+ //--AgentGen END
return TRUE;
}
@@ -8208,6 +8366,7 @@ commonOnlineExtPCLimitation::commonOnlineExtPCLimitation(const Oidx& id):
MibLeaf(id, READWRITE, new SnmpInt32()){
//--AgentGen BEGIN=commonOnlineExtPCLimitation::commonOnlineExtPCLimitation
set_state(SnmpInt32(0));
+ mOnlineIndex = 0;
//--AgentGen END
}
@@ -8232,7 +8391,24 @@ MibEntryPtr commonOnlineExtPCLimitation::clone()
void commonOnlineExtPCLimitation::get_request(Request* req, int ind)
{
//--AgentGen BEGIN=commonOnlineExtPCLimitation::get_request
- // TODO
+ unsigned int getValue = 0;
+ mOnlineIndex = req->get_oid(ind).last();
+
+ // get the current slaves
+ const struct plc_host * pHosts = SystemManager::instance()->getHosts(false); // already refreshed by table update
+ if (NULL == pHosts)
+ {
+ return;
+ }
+
+ if (0 != SystemManager::instance()->getMacLimit((const unsigned char *)pHosts[mOnlineIndex].macAddress, &getValue))
+ {
+ set_state(SnmpInt32(0));
+ }
+ else
+ {
+ set_state(SnmpUInt32(getValue));
+ }
//--AgentGen END
MibLeaf::get_request(req, ind);
}
@@ -8255,7 +8431,22 @@ void commonOnlineExtPCLimitation::set_state(long l)
int commonOnlineExtPCLimitation::set(const Vbx& vb)
{
//--AgentGen BEGIN=commonOnlineExtPCLimitation::set
- // TODO
+ int setValue;
+ vb.get_value(setValue);
+ if (get_state() != setValue)
+ {
+ // get the current slaves
+ const struct plc_host * pHosts = SystemManager::instance()->getHosts(false); // already refreshed by table update
+ if (NULL == pHosts)
+ {
+ return SNMP_ERROR_NO_ACCESS;
+ }
+
+ if (0 != SystemManager::instance()->setMacLimit((const unsigned char *)pHosts[mOnlineIndex].macAddress, (unsigned int)setValue))
+ {
+ return SNMP_ERROR_NO_ACCESS;
+ }
+ }
//--AgentGen END
return MibLeaf::set(vb);
}
@@ -8295,6 +8486,7 @@ int commonOnlineExtPCLimitation::prepare_set_request(Request* req, int& ind)
SNMP_ERROR_SUCCESS) return status;
//--AgentGen BEGIN=commonOnlineExtPCLimitation::prepare_set_request
+ mOnlineIndex = (unsigned char)req->get_oid(ind).last();
//--AgentGen END
return SNMP_ERROR_SUCCESS;
}
@@ -8368,7 +8560,7 @@ void commonOnlineRFOutputLevel::get_request(Request* req, int ind)
{
set_state(SnmpInt32(getValue));
}
- //--AgentGen END
+ //--AgentGen END
MibLeaf::get_request(req, ind);
}
@@ -8406,7 +8598,7 @@ int commonOnlineRFOutputLevel::set(const Vbx& vb)
return SNMP_ERROR_NO_ACCESS;
}
}
- //--AgentGen END
+ //--AgentGen END
return MibLeaf::set(vb);
}
@@ -11457,6 +11649,8 @@ nscrtv_eponeoc_common_mib::nscrtv_eponeoc_common_mib():
add(new commonAdminResetCause());
add(new commonAdminStatus());
add(new commonAdminVarBindings());
+ add(new commonAdminConfigurationSaving());
+ add(new commonAdminConfigurationResult());
add(new commonAdminLinkTopoChange());
add(new commonAdminAppropriativeOID());
add(new commonRFLinkMaximum());
diff --git a/application/agent/inc/mib-common.h b/application/agent/inc/mib-common.h
index e1e000a4d0..bbfe6bdaac 100755
--- a/application/agent/inc/mib-common.h
+++ b/application/agent/inc/mib-common.h
@@ -96,6 +96,10 @@ typedef struct
char serial_number[DEFAULT_SNMP_STRING_MAX_LENGTH];
char software_version[DEFAULT_SNMP_STRING_MAX_LENGTH];
char vendor_special_info[DEFAULT_SNMP_STRING_MAX_LENGTH];
+ char ip_address[SNMP_IP_ADDRESS_STRING_MAX_LENGTH];
+ char ip_mask[SNMP_IP_ADDRESS_STRING_MAX_LENGTH];
+ char ip_gateway[SNMP_IP_ADDRESS_STRING_MAX_LENGTH];
+ char broadcast[SNMP_IP_ADDRESS_STRING_MAX_LENGTH];
char ems_ip_address[SNMP_IP_ADDRESS_STRING_MAX_LENGTH];
} master_admin_group_t;
diff --git a/application/agent/inc/systemmanager.h b/application/agent/inc/systemmanager.h
index 4a5880c278..3634972432 100755
--- a/application/agent/inc/systemmanager.h
+++ b/application/agent/inc/systemmanager.h
@@ -78,11 +78,13 @@ public:
const char * getAdminSoftwareVersion ( );
const char * getAdminVendorSpecialInfo ( );
const uint8_t * getAdminMacAddress ( unsigned char interface_index );
- int getAdminIpAddress ( char *get_value, unsigned char interface_index );
+ int getAdminIpData ( unsigned char interface_index );
+ int setAdminIpData ( unsigned char interface_index );
+ int getAdminIpAddress ( char **get_value, unsigned char interface_index );
int setAdminIpAddress ( char *set_value, unsigned char interface_index );
- int getAdminIpMask ( char *get_value, unsigned char interface_index );
+ int getAdminIpMask ( char **get_value, unsigned char interface_index );
int setAdminIpMask ( char *get_value, unsigned char interface_index );
- int getAdminIpGateway ( char *get_value, unsigned char interface_index );
+ int getAdminIpGateway ( char **get_value, unsigned char interface_index );
int setAdminIpGateway ( char *set_value, unsigned char interface_index );
const char * getAdminEmsIpAddress ( );
int setAdminEmsIpAddress ( const char *set_value );
@@ -128,8 +130,10 @@ public:
int getWhiteListAll ( spidlib_white_list_register_t **get_value, int *nb_registered );
int setWhiteList ( const spidlib_white_list_register_t *set_value );
int onlineAllReset ( );
- int getMacLimit ( unsigned int *get_value );
- int setMacLimit ( unsigned int set_value );
+ int getMacLimit ( unsigned int *get_value ); // for all slaves (commonOnlineAllExtMACLimitation)
+ int setMacLimit ( unsigned int set_value ); // for all slaves (commonOnlineAllExtMACLimitation)
+ int getMacLimit ( const unsigned char *mac_address, unsigned int *get_value ); // for one slave (commonOnlineExtPCLimitation)
+ int setMacLimit ( const unsigned char *mac_address, unsigned int set_value ); // for one slave (commonOnlineExtPCLimitation)
int getOnlineAllRfOutputLevel ( int *get_value );
int setOnlineAllRfOutputLevel ( int set_value );
const struct plc_host * getHosts ( bool refresh );
diff --git a/application/agent/inc/underlayer.h b/application/agent/inc/underlayer.h
index 377807bbbe..4a5db1f791 100755
--- a/application/agent/inc/underlayer.h
+++ b/application/agent/inc/underlayer.h
@@ -64,6 +64,8 @@ public:
virtual int getAdminSerialNumber ( char *get_value );
virtual int getAdminSoftwareVersion ( char *get_value );
virtual int getAdminVendorSpecialInfo ( char *get_value );
+ virtual int getAdminIpData ( const char *iface, char *address, char *netmask, char *broadcast, char *gateway );
+ virtual int setAdminIpData ( const char *iface, char *address, char *netmask, char *broadcast, char *gateway );
virtual int getAdminEmsIpAddress ( char *get_value );
virtual int setAdminEmsIpAddress ( const char *set_value );
virtual int getAdminResetCause ( admin_reset_cause_t *get_value );
@@ -99,8 +101,10 @@ public:
virtual int getWhiteListAll ( spidlib_white_list_register_t *get_value, int *nb_registered );
virtual int setWhiteList ( const spidlib_white_list_register_t *set_value );
virtual int onlineAllReset ( );
- virtual int getMacLimit ( unsigned int* get_value );
- virtual int setMacLimit ( unsigned int set_value );
+ virtual int getMacLimit ( unsigned int* get_value ); // for all slaves (commonOnlineAllExtMACLimitation)
+ virtual int setMacLimit ( unsigned int set_value ); // for all slaves (commonOnlineAllExtMACLimitation)
+ virtual int getMacLimit ( const unsigned char *mac_address, unsigned int *get_value ); // for one slave (commonOnlineExtPCLimitation)
+ virtual int setMacLimit ( const unsigned char *mac_address, unsigned int set_value ); // for one slave (commonOnlineExtPCLimitation)
virtual int getOnlineAllRfOutputLevel ( int *get_value );
virtual int setOnlineAllRfOutputLevel ( int set_value );
virtual int getOnlineIp ( const unsigned char *mac_address, struct online_ip & ip );
diff --git a/application/agent/mibs/EOC-MIB.txt b/application/agent/mibs/EOC-MIB.txt
index 481f7b6b64..3a0b518573 100644
--- a/application/agent/mibs/EOC-MIB.txt
+++ b/application/agent/mibs/EOC-MIB.txt
@@ -708,6 +708,21 @@ commonAdminVarBindings OBJECT-TYPE
--"此对象表示能被MASTER接收的SNMP消息变量绑定表项的最大数目。其值为0表示对绑定最大数目没有限制。"
::= { commonSNMPSettingGroup 1 }
+commonAdminConfigurationSaving OBJECT-TYPE
+ SYNTAX TruthValue { saving (1) }
+ ACCESS read-write
+ STATUS mandatory
+ DESCRIPTION ""
+ --"写入‘1’将当前的配置存入非易失性存储器中,写入其它值不起作用。读此对象时返回值‘1’,对设备无影响。此操作建议作为每次变更配置后的必须操作。"
+ ::= { commonSNMPSettingGroup 2 }
+
+commonAdminConfigurationResult OBJECT-TYPE
+ SYNTAX TruthValue { success (1), fail (2) }
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION ""
+ --"写入当前的配置存入非易失性存储器中的操作结果:‘1’表示操作成功,‘2’表示操作失败。"
+ ::= { commonSNMPSettingGroup 3 }
commonAdminLinkTopoChange OBJECT-TYPE
SYNTAX TruthValue { true(1), false(2) }
diff --git a/application/agent/src/SystemManager.cpp b/application/agent/src/SystemManager.cpp
index 62ebb5c496..55f7e42931 100644
--- a/application/agent/src/SystemManager.cpp
+++ b/application/agent/src/SystemManager.cpp
@@ -244,10 +244,109 @@ const uint8_t * SystemManager::getAdminMacAddress ( unsigned char interface_inde
}
-int SystemManager::getAdminIpAddress ( char *get_value, unsigned char interface_index )
+int SystemManager::getAdminIpData ( unsigned char interface_index )
+{
+ // eth0
+ if (_DEFAULT_SNMP_ETHER_IF_INDEX == interface_index)
+ {
+ return m_underlayer->getAdminIpData(SPIDLIB_INTERFACE_ETH0,
+ mMasterAdminGroup.ip_address,
+ mMasterAdminGroup.ip_mask,
+ mMasterAdminGroup.broadcast,
+ mMasterAdminGroup.ip_gateway);
+ }
+
+ // plc0
+ else if (_DEFAULT_SNMP_PLC_IF_INDEX == interface_index)
+ {
+ return m_underlayer->getAdminIpData(SPIDLIB_INTERFACE_PLC0,
+ mMasterAdminGroup.ip_address,
+ mMasterAdminGroup.ip_mask,
+ mMasterAdminGroup.broadcast,
+ mMasterAdminGroup.ip_gateway);
+ }
+
+ // br0
+ else if (_DEFAULT_SNMP_BRIDGE_IF_INDEX == interface_index)
+ {
+ int ret = m_underlayer->getAdminIpData(SPIDLIB_INTERFACE_BR0,
+ mMasterAdminGroup.ip_address,
+ mMasterAdminGroup.ip_mask,
+ mMasterAdminGroup.broadcast,
+ mMasterAdminGroup.ip_gateway);
+ if (0 != ret)
+ {
+ // if br0 does not exist, call function for eth0
+ return m_underlayer->getAdminIpData(SPIDLIB_INTERFACE_ETH0,
+ mMasterAdminGroup.ip_address,
+ mMasterAdminGroup.ip_mask,
+ mMasterAdminGroup.broadcast,
+ mMasterAdminGroup.ip_gateway);
+ }
+ return ret;
+ }
+
+ else
+ {
+ return -1;
+ }
+}
+
+
+int SystemManager::setAdminIpData ( unsigned char interface_index )
+{
+ // eth0
+ if (_DEFAULT_SNMP_ETHER_IF_INDEX == interface_index)
+ {
+ return m_underlayer->setAdminIpData(SPIDLIB_INTERFACE_ETH0,
+ mMasterAdminGroup.ip_address,
+ mMasterAdminGroup.ip_mask,
+ mMasterAdminGroup.broadcast,
+ mMasterAdminGroup.ip_gateway);
+ }
+
+ // plc0
+ else if (_DEFAULT_SNMP_PLC_IF_INDEX == interface_index)
+ {
+ return m_underlayer->setAdminIpData(SPIDLIB_INTERFACE_PLC0,
+ mMasterAdminGroup.ip_address,
+ mMasterAdminGroup.ip_mask,
+ mMasterAdminGroup.broadcast,
+ mMasterAdminGroup.ip_gateway);
+ }
+
+ // br0
+ else if (_DEFAULT_SNMP_BRIDGE_IF_INDEX == interface_index)
+ {
+ int ret = m_underlayer->setAdminIpData(SPIDLIB_INTERFACE_BR0,
+ mMasterAdminGroup.ip_address,
+ mMasterAdminGroup.ip_mask,
+ mMasterAdminGroup.broadcast,
+ mMasterAdminGroup.ip_gateway);
+ if (0 != ret)
+ {
+ // if br0 does not exist, call function for eth0
+ return m_underlayer->setAdminIpData(SPIDLIB_INTERFACE_ETH0,
+ mMasterAdminGroup.ip_address,
+ mMasterAdminGroup.ip_mask,
+ mMasterAdminGroup.broadcast,
+ mMasterAdminGroup.ip_gateway);
+ }
+ return ret;
+ }
+
+ else
+ {
+ return -1;
+ }
+}
+
+
+int SystemManager::getAdminIpAddress ( char **get_value, unsigned char interface_index )
{
if (NULL != get_value)
{
+/*
if (_DEFAULT_SNMP_ETHER_IF_INDEX == interface_index)
{
intIP_to_strIP(m_ethmac.ipGroup.ipAdEntAddr, get_value);
@@ -260,11 +359,14 @@ int SystemManager::getAdminIpAddress ( char *get_value, unsigned char interface_
{
intIP_to_strIP(m_bridgemac.ipGroup.ipAdEntAddr, get_value);
}
- return 0;
+*/
+ memset(mMasterAdminGroup.ip_address, '\0', SNMP_IP_ADDRESS_STRING_MAX_LENGTH);
+ *get_value = mMasterAdminGroup.ip_address;
+ return getAdminIpData(interface_index);
}
else
{
- return -1;
+ return -1;
}
}
@@ -273,6 +375,7 @@ int SystemManager::setAdminIpAddress ( char *set_value, unsigned char interface_
{
if (NULL != set_value)
{
+/*
if (_DEFAULT_SNMP_ETHER_IF_INDEX == interface_index)
{
m_ethmac.ipGroup.ipAdEntAddr = strIP_to_intIP(set_value);
@@ -286,6 +389,15 @@ int SystemManager::setAdminIpAddress ( char *set_value, unsigned char interface_
m_bridgemac.ipGroup.ipAdEntAddr = strIP_to_intIP(set_value);
}
return 0;
+*/
+ // need to get other ip data values before setting the ip address
+ int ret = getAdminIpData(interface_index);
+ if (0 == ret)
+ {
+ memcpy(mMasterAdminGroup.ip_address, set_value, SNMP_IP_ADDRESS_STRING_MAX_LENGTH);
+ return setAdminIpData(interface_index);
+ }
+ return ret;
}
else
{
@@ -294,10 +406,11 @@ int SystemManager::setAdminIpAddress ( char *set_value, unsigned char interface_
}
-int SystemManager::getAdminIpMask ( char *get_value, unsigned char interface_index )
+int SystemManager::getAdminIpMask ( char **get_value, unsigned char interface_index )
{
if (NULL != get_value)
{
+/*
if (_DEFAULT_SNMP_ETHER_IF_INDEX == interface_index)
{
intIP_to_strIP(m_ethmac.ipGroup.ipAdEntNetMask, get_value);
@@ -311,10 +424,14 @@ int SystemManager::getAdminIpMask ( char *get_value, unsigned char interface_ind
intIP_to_strIP(m_bridgemac.ipGroup.ipAdEntNetMask, get_value);
}
return 0;
+*/
+ memset(mMasterAdminGroup.ip_mask, '\0', SNMP_IP_ADDRESS_STRING_MAX_LENGTH);
+ *get_value = mMasterAdminGroup.ip_mask;
+ return getAdminIpData(interface_index);
}
else
{
- return -1;
+ return -1;
}
}
@@ -323,6 +440,7 @@ int SystemManager::setAdminIpMask ( char *set_value, unsigned char interface_ind
{
if (NULL != set_value)
{
+/*
if (_DEFAULT_SNMP_ETHER_IF_INDEX == interface_index)
{
m_ethmac.ipGroup.ipAdEntNetMask = strIP_to_intIP(set_value);
@@ -336,6 +454,15 @@ int SystemManager::setAdminIpMask ( char *set_value, unsigned char interface_ind
m_bridgemac.ipGroup.ipAdEntNetMask = strIP_to_intIP(set_value);
}
return 0;
+*/
+ // need to get other ip data values before setting the ip netmask
+ int ret = getAdminIpData(interface_index);
+ if (0 == ret)
+ {
+ memcpy(mMasterAdminGroup.ip_mask, set_value, SNMP_IP_ADDRESS_STRING_MAX_LENGTH);
+ return setAdminIpData(interface_index);
+ }
+ return ret;
}
else
{
@@ -344,10 +471,11 @@ int SystemManager::setAdminIpMask ( char *set_value, unsigned char interface_ind
}
-int SystemManager::getAdminIpGateway ( char *get_value, unsigned char interface_index )
+int SystemManager::getAdminIpGateway ( char **get_value, unsigned char interface_index )
{
if (NULL != get_value)
{
+/*
if (_DEFAULT_SNMP_ETHER_IF_INDEX == interface_index)
{
intIP_to_strIP(m_ethmac.ipGateway, get_value);
@@ -361,10 +489,14 @@ int SystemManager::getAdminIpGateway ( char *get_value, unsigned char interface_
intIP_to_strIP(m_bridgemac.ipGateway, get_value);
}
return 0;
+*/
+ memset(mMasterAdminGroup.ip_gateway, '\0', SNMP_IP_ADDRESS_STRING_MAX_LENGTH);
+ *get_value = mMasterAdminGroup.ip_gateway;
+ return getAdminIpData(interface_index);
}
else
{
- return -1;
+ return -1;
}
}
@@ -373,6 +505,7 @@ int SystemManager::setAdminIpGateway ( char *set_value, unsigned char interface_
{
if (NULL != set_value)
{
+/*
if (_DEFAULT_SNMP_ETHER_IF_INDEX == interface_index)
{
m_ethmac.ipGateway = strIP_to_intIP(set_value);
@@ -386,6 +519,15 @@ int SystemManager::setAdminIpGateway ( char *set_value, unsigned char interface_
m_bridgemac.ipGateway = strIP_to_intIP(set_value);
}
return 0;
+*/
+ // need to get other ip data values before setting the ip gateway
+ int ret = getAdminIpData(interface_index);
+ if (0 == ret)
+ {
+ memcpy(mMasterAdminGroup.ip_gateway, set_value, SNMP_IP_ADDRESS_STRING_MAX_LENGTH);
+ return setAdminIpData(interface_index);
+ }
+ return ret;
}
else
{
@@ -737,6 +879,28 @@ int SystemManager::setMacLimit ( unsigned int set_value )
}
+int SystemManager::getMacLimit ( const unsigned char *mac_address, unsigned int *get_value )
+{
+ int ret = -1;
+ if ( (NULL == mac_address) || (NULL == get_value) )
+ {
+ return -1;
+ }
+ ret = m_underlayer->getMacLimit(mac_address, get_value);
+ return ret;
+}
+
+
+int SystemManager::setMacLimit ( const unsigned char *mac_address, unsigned int set_value )
+{
+ if (NULL == mac_address)
+ {
+ return -1;
+ }
+ return m_underlayer->setMacLimit(set_value);
+}
+
+
int SystemManager::getOnlineAllRfOutputLevel ( int *get_value )
{
if (NULL == get_value)
diff --git a/application/agent/src/Underlayer.cpp b/application/agent/src/Underlayer.cpp
index 50e0c2a465..b12436b96c 100644
--- a/application/agent/src/Underlayer.cpp
+++ b/application/agent/src/Underlayer.cpp
@@ -165,6 +165,36 @@ int Underlayer::getAdminVendorSpecialInfo ( char *get_value )
}
+int Underlayer::getAdminIpData ( const char *iface, char *address, char *netmask, char *broadcast, char *gateway )
+{
+ if ( (NULL == iface)
+ || (NULL == address)
+ || (NULL == netmask)
+ || (NULL == broadcast)
+ || (NULL == gateway) )
+ {
+ return -1;
+ }
+
+ return spidlib_get_ip_data(iface, address, netmask, broadcast, gateway);
+}
+
+
+int Underlayer::setAdminIpData ( const char *iface, char *address, char *netmask, char *broadcast, char *gateway )
+{
+ if ( (NULL == iface)
+ || (NULL == address)
+ || (NULL == netmask)
+ || (NULL == broadcast)
+ || (NULL == gateway) )
+ {
+ return -1;
+ }
+
+ return spidlib_set_ip_data(iface, address, netmask, broadcast, gateway);
+}
+
+
int Underlayer::getAdminEmsIpAddress ( char *get_value )
{
if (NULL == get_value)
@@ -495,15 +525,62 @@ int Underlayer::onlineAllReset ( )
}
-int Underlayer::getMacLimit (unsigned int *get_value )
+int Underlayer::getMacLimit ( unsigned int *get_value )
{
+ if (NULL == get_value)
+ {
+ return -1;
+ }
+
return spidlib_get_plc_mac_limit(get_value);
}
-int Underlayer::setMacLimit (unsigned int set_value )
+int Underlayer::setMacLimit ( unsigned int set_value )
+{
+ int ret = 0;
+
+ // for all online slaves (commonOnlineAllExtMACLimitation)
+ for (int index=0; index<PLCP_MAX_HOST; index++)
+ {
+ if ((SystemManager::instance()->isHostActive(index))
+ && (SystemManager::instance()->isHostAuthorized(index)))
+ {
+ ret += smm_set_mac_limit((const unsigned char *)SystemManager::instance()->PlcHost(index).macAddress, mMaxRetries, set_value);
+ }
+ }
+
+ // save locally the online slaves mac limit which has been set
+ if (0 == ret)
+ {
+ ret = spidlib_set_plc_mac_limit(set_value);
+ }
+
+ return ret;
+}
+
+
+int Underlayer::getMacLimit ( const unsigned char *mac_address, unsigned int *get_value )
+{
+ if ( (NULL == mac_address) || (NULL == get_value) )
+ {
+ return -1;
+ }
+
+ // for one slave (commonOnlineExtPCLimitation)
+ return smm_get_mac_limit(mac_address, mMaxRetries, get_value);
+}
+
+
+int Underlayer::setMacLimit ( const unsigned char *mac_address, unsigned int set_value )
{
- return spidlib_set_plc_mac_limit(set_value);
+ if (NULL == mac_address)
+ {
+ return -1;
+ }
+
+ // for one slave (commonOnlineExtPCLimitation)
+ return smm_set_mac_limit(mac_address, mMaxRetries, set_value);
}
diff --git a/application/smm/smm-server/src/smm_req.c b/application/smm/smm-server/src/smm_req.c
index 85c885f0bf..5f860845b8 100644
--- a/application/smm/smm-server/src/smm_req.c
+++ b/application/smm/smm-server/src/smm_req.c
@@ -222,6 +222,7 @@ void req_ip_get(unsigned char *smmentry, size_t *smmentry_len)
char iface[INTERFACE_STRING_MAX_LENGTH];
char ip_addr_string[IP_ADDRESS_STRING_MAX_LENGTH];
char netmask_string[NETMASK_STRING_MAX_LENGTH];
+ char broadcast_string[NETMASK_STRING_MAX_LENGTH];
char gateway_string[GATEWAY_STRING_MAX_LENGTH];
struct in_addr ip_addr, netmask, gateway;
char ip_mode[IP_MODE_STRING_MAX_LENGTH];
@@ -245,6 +246,7 @@ void req_ip_get(unsigned char *smmentry, size_t *smmentry_len)
smmentry[0] = 0x01;
*smmentry_len = 1;
+#if 0
/* Get requested data and fill response smmentry. */
ret = spidlib_get_ip_addr(iface, ip_addr_string, sizeof(ip_addr_string));
if ((ret != 0) && (ret != -EFAULT))
@@ -267,6 +269,15 @@ void req_ip_get(unsigned char *smmentry, size_t *smmentry_len)
syslog(LOG_ERR, "[req_ip_get] spidlib_get_ip_gateway: errno = %d", errno);
return;
}
+#endif // 0
+
+ ret = spidlib_get_ip_data(iface, ip_addr_string, netmask_string, broadcast_string /* unused */, gateway_string);
+ if ((ret != 0) && (ret != -EFAULT))
+ {
+ syslog(LOG_ERR, "[req_ip_get] spidlib_get_ip_data: errno = %d", errno);
+ return;
+ }
+
ret = spidlib_get_ip_mode(ip_mode, sizeof(ip_mode));
/* EFAULT: no ip mode found => return default value = 0 */
if ((ret != 0) && (ret != -EFAULT))
diff --git a/application/spidlib/inc/services.h b/application/spidlib/inc/services.h
index fe1d62b072..cebf2ee4ee 100644
--- a/application/spidlib/inc/services.h
+++ b/application/spidlib/inc/services.h
@@ -140,7 +140,7 @@ extern int spidlib_check_serial_state(int status); // TODO
extern int spidlib_set_serial_state(int status); // TODO
#ifndef TEST
-#define SPIDLIB_CONFIG_SNMP_FILE "/etc/config/snmp.conf"
+#define SPIDLIB_CONFIG_SNMP_FILE "/etc/snmp.conf"
#else
#define SPIDLIB_CONFIG_SNMP_FILE "../test/etc/config/snmp.conf"
#endif /* TEST */
diff --git a/application/spidlib/test/scripts/snmp.sh b/application/spidlib/test/scripts/snmp.sh
index c3ba284efd..940025965a 100755
--- a/application/spidlib/test/scripts/snmp.sh
+++ b/application/spidlib/test/scripts/snmp.sh
@@ -4,3 +4,4 @@
# It is called by 'etc.sh'
echo 'ADMIN_LOGICAL_ID=Default Admin Logical Id'
+echo 'ADMIN_EMS_IP_ADDRESS=127.0.0.1'
diff --git a/package/initramfs/root/factory/config/snmp.conf b/package/initramfs/root/factory/config/snmp.conf
deleted file mode 100644
index e6bbe4ff7c..0000000000
--- a/package/initramfs/root/factory/config/snmp.conf
+++ /dev/null
@@ -1 +0,0 @@
-ADMIN_LOGICAL_ID = Default Admin Logical Id \ No newline at end of file
diff --git a/package/initramfs/root/factory/snmp.conf b/package/initramfs/root/factory/snmp.conf
new file mode 100644
index 0000000000..c8f9707e0d
--- /dev/null
+++ b/package/initramfs/root/factory/snmp.conf
@@ -0,0 +1,2 @@
+ADMIN_LOGICAL_ID = Default Admin Logical Id
+ADMIN_EMS_IP_ADDRESS = 0.0.0.0 \ No newline at end of file
diff --git a/tools/flashfs/image/etc/config/snmp.conf b/tools/flashfs/image/etc/config/snmp.conf
deleted file mode 100644
index e6bbe4ff7c..0000000000
--- a/tools/flashfs/image/etc/config/snmp.conf
+++ /dev/null
@@ -1 +0,0 @@
-ADMIN_LOGICAL_ID = Default Admin Logical Id \ No newline at end of file
diff --git a/tools/flashfs/image/etc/snmp.conf b/tools/flashfs/image/etc/snmp.conf
new file mode 100644
index 0000000000..c8f9707e0d
--- /dev/null
+++ b/tools/flashfs/image/etc/snmp.conf
@@ -0,0 +1,2 @@
+ADMIN_LOGICAL_ID = Default Admin Logical Id
+ADMIN_EMS_IP_ADDRESS = 0.0.0.0 \ No newline at end of file