summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--application/agent/agent++/agentgen/agent/src/nscrtv_eponeoc_mod_eoc_mib.cpp62
1 files changed, 51 insertions, 11 deletions
diff --git a/application/agent/agent++/agentgen/agent/src/nscrtv_eponeoc_mod_eoc_mib.cpp b/application/agent/agent++/agentgen/agent/src/nscrtv_eponeoc_mod_eoc_mib.cpp
index 491981ed5b..06711a8255 100644
--- a/application/agent/agent++/agentgen/agent/src/nscrtv_eponeoc_mod_eoc_mib.cpp
+++ b/application/agent/agent++/agentgen/agent/src/nscrtv_eponeoc_mod_eoc_mib.cpp
@@ -11721,18 +11721,38 @@ int nscrtv_eponeoc_mod_eoc_mib_modEoCIGMPSnoopingDevMACAddress::set(const Vbx& v
int temp_status; int &temp_status_ref = temp_status;
entry->get_nth(1)->get_value(temp_status_ref);
- spidlib_igmp_entry_t container;
- container.slave_index = temp_status;
+ char previous_mac[32];
+ entry->get_nth(2)->get_value(previous_mac);
- if (spidlib_get_igmp_entry(&container) != 0)
+ unsigned char nb_entries = 16;
+ spidlib_igmp_entry_t container[16]; //TODO find a proper limit
+
+ if (spidlib_get_igmp_entry(container, &nb_entries, temp_status) != 0)
{
syslog(LOG_DEBUG, "SNMP agent: couldn't retrieve previous snooping entry for index %d", temp_status);
return SNMP_ERROR_RESOURCE_UNAVAIL;
}
- strcpy(container.mac_address, temp_mac_str);
+ int i = 0;
+ for (i = 0; i < nb_entries; i++)
+ {
+ if (strcmp(container[i].mcast_mac_address, previous_mac) == 0)
+ {
+ break;
+ }
+ }
+
+ if (i >= nb_entries)
+ {
+ syslog(LOG_DEBUG, "SNMP agent: couldn't retrieve previous snooping entry for index %d and mac %s", temp_status, previous_mac);
+ return SNMP_ERROR_RESOURCE_UNAVAIL;
+ }
+ else
+ {
+ strcpy(container[i].mcast_mac_address, temp_mac_str);
+ }
- if (spidlib_set_igmp_entry(container) != 0)
+ if (spidlib_set_igmp_entry(container[i]) != 0)
{
syslog(LOG_DEBUG, "SNMP agent: couldn't set new snooping entry for index %d", temp_status);
return SNMP_ERROR_RESOURCE_UNAVAIL;
@@ -11872,18 +11892,38 @@ int nscrtv_eponeoc_mod_eoc_mib_modEoCIGMPSnoopingEN::set(const Vbx& vb)
int temp_status; int &temp_status_ref = temp_status;
entry->get_nth(1)->get_value(temp_status_ref);
- spidlib_igmp_entry_t container;
- container.slave_index = temp_status;
+ char previous_mac[32];
+ entry->get_nth(2)->get_value(previous_mac);
- if (spidlib_get_igmp_entry(&container) != 0)
+ unsigned char nb_entries = 16;
+ spidlib_igmp_entry_t container[16]; //TODO find a proper limit
+
+ if (spidlib_get_igmp_entry(container, &nb_entries, temp_status) != 0)
{
syslog(LOG_DEBUG, "SNMP agent: couldn't retrieve previous snooping entry for index %d", temp_status);
return SNMP_ERROR_RESOURCE_UNAVAIL;
}
- container.enable = temp_enable;
+ int i = 0;
+ for (i = 0; i < nb_entries; i++)
+ {
+ if (strcmp(container[i].mcast_mac_address, previous_mac) == 0)
+ {
+ break;
+ }
+ }
+
+ if (i >= nb_entries)
+ {
+ syslog(LOG_DEBUG, "SNMP agent: couldn't retrieve previous snooping entry for index %d and mac %s", temp_status, previous_mac);
+ return SNMP_ERROR_RESOURCE_UNAVAIL;
+ }
+ else
+ {
+ container[i].enable = temp_enable;
+ }
- if (spidlib_set_igmp_entry(container) != 0)
+ if (spidlib_set_igmp_entry(container[i]) != 0)
{
syslog(LOG_DEBUG, "SNMP agent: couldn't set new snooping entry for index %d", temp_status);
return SNMP_ERROR_RESOURCE_UNAVAIL;
@@ -14562,7 +14602,7 @@ void nscrtv_eponeoc_mod_eoc_mib_modEoCIGMPSnoopingEntry::update(Request* req)
nscrtv_eponeoc_mod_eoc_mib_modEoCIGMPSnoopingEntry::instance->set_row(entry,
0, //only one master
container[i].slave_index,
- container[i].mac_address,
+ container[i].mcast_mac_address,
container[i].enable);
//delete pIndex;