X-Git-Url: https://git.stg.codes/ssmd.git/blobdiff_plain/ae26516a8828d54ab7c0e0bca92031a54a15ed62..2cb0fb0f4589e1a91719da49c12ccf3210dfb986:/src/switch.cpp?ds=inline diff --git a/src/switch.cpp b/src/switch.cpp index 43c83da..bf18aa3 100644 --- a/src/switch.cpp +++ b/src/switch.cpp @@ -174,23 +174,27 @@ bool Switch::dropACLsByTable(const CTarget & target, unsigned profileId, const S dropACLOidPrefix += "."; dropACLOidPrefix += boost::lexical_cast(profileId); SNMPList aclsList(table.getList()); - Pdu pdu; - SNMPList::const_iterator it; - for (it = aclsList.begin(); it != aclsList.end(); ++it) { - int id; - if (it->get_value(id) != SNMP_CLASS_SUCCESS) { + SNMPList::const_iterator it(aclsList.begin()); + size_t chunks = aclsList.size() / _settings.maxACLPerPDU() + 1; + for (size_t i = 0; i < chunks && it != aclsList.end(); ++i) { + Pdu pdu; + for (size_t j = 0; j < _settings.maxACLPerPDU() && it != aclsList.end(); ++j, ++it) { + int id; + if (int c = it->get_value(id) != SNMP_CLASS_SUCCESS) { + logger << "Switch::dropACLsByTable() - failed to get ACL id for the switch '" << _ip << "'. Error message: '" << Snmp::error_msg(c) << "'" << std::endl; + return false; + } + std::string dropACLOid(dropACLOidPrefix); + dropACLOid += "."; + dropACLOid += boost::lexical_cast(id); + Vb vb(Oid(dropACLOid.c_str())); + vb.set_value(int(6)); + pdu += vb; + } + if (int c = _snmp.set(pdu, target) != SNMP_CLASS_SUCCESS) { + logger << "Switch::dropACLsByTable() - failed to invoke Snmp::set for the switch '" << _ip << "'. Error message: '" << Snmp::error_msg(c) << "'" << std::endl; return false; } - std::string dropACLOid(dropACLOidPrefix); - dropACLOid += "."; - dropACLOid += boost::lexical_cast(id); - Vb vb(Oid(dropACLOid.c_str())); - vb.set_value(int(6)); - pdu += vb; - } - if (_snmp.set(pdu, target) != SNMP_CLASS_SUCCESS) { - logger << "Switch::dropACLsByTable() - failed to invoke Snmp::set for the switch '" << _ip << "'" << std::endl; - return false; } return true; } @@ -201,8 +205,8 @@ bool Switch::createACLs(const CTarget & target) for (it = _acls.begin(); it != _acls.end(); ++it) { Pdu pdu; it->appendPdu(pdu); - if (_snmp.set(pdu, target) != SNMP_CLASS_SUCCESS) { - logger << "Switch::createACLs() - failed to invoke Snmp::set for the switch '" << _ip << "'" << std::endl; + if (int c = _snmp.set(pdu, target) != SNMP_CLASS_SUCCESS) { + logger << "Switch::createACLs() - failed to invoke Snmp::set for the switch '" << _ip << "'. Error message: '" << Snmp::error_msg(c) << "'" << std::endl; return false; } }