#define __GTS_ACL_H__
#include <string>
+#include <ostream>
class Pdu;
bool _isUpload;
std::string getSuffix() const;
+
+ friend std::ostream & operator<<(std::ostream & stream, const ACL & acl);
};
+std::ostream & operator<<(std::ostream & stream, const GTS::ACL & acl);
+
}
#endif
pdu += vb;*/
}
+std::ostream & GTS::operator<<(std::ostream & stream, const ACL & acl)
+{
+ std::string oidValue;
+ // MAC
+ if (acl._isUpload) {
+ oidValue = swACLEtherRuleSrcMacAddress;
+ oidValue += acl.getSuffix();
+ } else {
+ oidValue = swACLEtherRuleDstMacAddress;
+ oidValue += acl.getSuffix();
+ }
+ stream << oidValue << ":" << acl._mac << " ";
+
+ // Permit rule
+ oidValue = swACLEtherRulePermit;
+ oidValue += acl.getSuffix();
+ stream << oidValue << ":" << 2 << " ";
+
+ // Port
+ oidValue = swACLEtherRulePort;
+ oidValue += acl.getSuffix();
+ stream << oidValue << ":" << acl._port << " ";
+
+ // Shape
+ oidValue = swACLEtherRuleRxRate;
+ oidValue += acl.getSuffix();
+ stream << oidValue << ":" << acl._shape << " ";
+
+ // Create ACL
+ oidValue = swACLEtherRuleRowStatus;
+ oidValue += acl.getSuffix();
+ stream << oidValue << ":" << 4;
+
+ return stream;
+}
+
inline
std::string ACL::getSuffix() const
{
bool Switch::createACLs(const CTarget & target)
{
std::vector<ACL>::const_iterator it;
+ size_t pos = 0;
for (it = _acls.begin(); it != _acls.end(); ++it) {
Pdu pdu;
it->appendPdu(pdu);
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;
+ logger << "Switch::createACLs() - failed to invoke Snmp::set for the switch '" << _ip << "'. Error message: '" << Snmp::error_msg(c) << "'. Error occured at creation of " << (pos + 1) << " from " << _acls.size() << " ACL's" << std::endl;
+ logger << "Switch::createACLs() - ACL dump: " << *it << std::endl;
return false;
}
_aclsCreated = true;
+ ++pos;
}
return true;
}