本文整理汇总了C++中PolicyRule::getSrc方法的典型用法代码示例。如果您正苦于以下问题:C++ PolicyRule::getSrc方法的具体用法?C++ PolicyRule::getSrc怎么用?C++ PolicyRule::getSrc使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PolicyRule
的用法示例。
在下文中一共展示了PolicyRule::getSrc方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: if
bool PolicyCompiler::ConvertToAtomicForAddresses::processNext()
{
PolicyRule *rule=getNext(); if (rule==NULL) return false;
RuleElementSrc *src=rule->getSrc(); assert(src);
RuleElementDst *dst=rule->getDst(); assert(dst);
for (FWObject::iterator i1=src->begin(); i1!=src->end(); ++i1) {
for (FWObject::iterator i2=dst->begin(); i2!=dst->end(); ++i2) {
PolicyRule *r = compiler->dbcopy->createPolicyRule();
r->duplicate(rule);
compiler->temp_ruleset->add(r);
FWObject *s;
s=r->getSrc(); assert(s);
s->clearChildren();
s->addCopyOf( *i1 );
s=r->getDst(); assert(s);
s->clearChildren();
s->addCopyOf( *i2 );
tmp_queue.push_back(r);
}
}
return true;
}
示例2: while
void PolicyCompiler_ipf::optimize1::optimizeForRuleElement(PolicyRule *rule,
const std::string &re_type)
{
RuleElement *re=RuleElement::cast(rule->getFirstByType(re_type));
PolicyRule *r;
r= compiler->dbcopy->createPolicyRule();
compiler->temp_ruleset->add(r);
r->duplicate(rule);
/* duplicate copies everything, including attribute
* "skip_label". That's why I set skip_label after I create a copy of the rule
*/
string skip_target = FWObjectDatabase::getStringId(rule->getId());
while (skip_targets[skip_target]) skip_target+=".A";
skip_targets[skip_target]=true;
// just need a unique label, and ID is unique
rule->setStr("skip_label", skip_target);
for (FWObject::iterator i=r->begin(); i!=r->end(); ++i)
{
if (RuleElement::cast(*i)!=nullptr && (*i)->getTypeName()!=re_type)
{
RuleElement *nre=RuleElement::cast(*i);
nre->clearChildren();
nre->setAnyElement();
}
}
r->setAction(PolicyRule::Skip);
r->setBool("quick",false);
r->setStr("skip_to",skip_target);
tmp_queue.push_back(r);
r= compiler->dbcopy->createPolicyRule();
compiler->temp_ruleset->add(r);
r->duplicate(rule);
RuleElement *re1;
re1=r->getSrc(); re1->clearChildren(); re1->setAnyElement();
re1=r->getDst(); re1->clearChildren(); re1->setAnyElement();
re1=r->getSrv(); re1->clearChildren(); re1->setAnyElement();
r->setAction(PolicyRule::Continue);
r->setStr("skip_label","");
tmp_queue.push_back(r);
re->clearChildren();
re->setAnyElement();
/* rules that we have inserted above 'rule' will skip over it. We should
* not drop them when we eliminate duplicates */
rule->setBool("skip_check_for_duplicates",true);
tmp_queue.push_back(rule);
}
示例3: getNext
bool PolicyCompiler_junosacl::checkForDynamicInterface::processNext()
{
PolicyRule *rule = getNext(); if (rule==NULL) return false;
findDynamicInterface(rule,rule->getSrc());
findDynamicInterface(rule,rule->getDst());
tmp_queue.push_back(rule);
return true;
}
示例4: addSrc
void PFImporter::addSrc()
{
PolicyRule *rule = PolicyRule::cast(current_rule);
RuleElement *re = rule->getSrc();
list<AddressSpec>::iterator it;
for (it=src_group.begin(); it!=src_group.end(); ++it)
{
FWObject *obj = makeAddressObj(*it);
if (obj) re->addRef(obj);
}
}
示例5: if
bool PolicyCompiler_ipf::doSrcNegation::processNext()
{
PolicyRule *rule=getNext(); if (rule==NULL) return false;
RuleElementSrc *src=rule->getSrc();
if (src->getNeg()) {
RuleElementSrc *nsrc;
PolicyRule *r;
FWOptions *ruleopt;
r= compiler->dbcopy->createPolicyRule();
compiler->temp_ruleset->add(r);
r->duplicate(rule);
r->setAction(PolicyRule::Continue);
r->setLogging(false);
nsrc=r->getSrc();
nsrc->setNeg(false);
r->setBool("quick",false);
r->setBool("skip_check_for_duplicates",true);
ruleopt = r->getOptionsObject();
ruleopt->setBool("stateless", true);
tmp_queue.push_back(r);
r= compiler->dbcopy->createPolicyRule();
compiler->temp_ruleset->add(r);
r->duplicate(rule);
nsrc=r->getSrc();
nsrc->setNeg(false);
nsrc->clearChildren();
nsrc->setAnyElement();
r->setBool("quick",true);
r->setBool("skip_check_for_duplicates",true);
tmp_queue.push_back(r);
return true;
}
tmp_queue.push_back(rule);
return true;
}
示例6: if
bool PolicyCompiler_pf::doSrcNegation::processNext()
{
PolicyRule *rule=getNext(); if (rule==NULL) return false;
RuleElementSrc *src=rule->getSrc();
if (src->getNeg()) {
RuleElementSrc *nsrc;
PolicyRule *r;
r= compiler->dbcopy->createPolicyRule();
compiler->temp_ruleset->add(r);
r->duplicate(rule);
if (rule->getAction()==PolicyRule::Accept)
r->setAction(PolicyRule::Deny);
else
r->setAction(PolicyRule::Accept);
nsrc=r->getSrc();
nsrc->setNeg(false);
r->setBool("quick",true);
r->setLogging(false);
tmp_queue.push_back(r);
r= compiler->dbcopy->createPolicyRule();
compiler->temp_ruleset->add(r);
r->duplicate(rule);
nsrc=r->getSrc();
nsrc->setNeg(false);
nsrc->clearChildren();
nsrc->setAnyElement();
r->setBool("quick",true);
tmp_queue.push_back(r);
return true;
}
tmp_queue.push_back(rule);
return true;
}
示例7: getNext
bool PolicyCompiler_pf::createTables::processNext()
{
PolicyCompiler_pf *pf_comp = dynamic_cast<PolicyCompiler_pf*>(compiler);
PolicyRule *rule = getNext(); if (rule==NULL) return false;
RuleElementSrc *src = rule->getSrc();
RuleElementDst *dst = rule->getDst();
if (!src->isAny()) pf_comp->tables->createTablesForRE(src, rule);
if (!dst->isAny()) pf_comp->tables->createTablesForRE(dst, rule);
tmp_queue.push_back(rule);
return true;
}
示例8: cmpRules
bool PolicyCompiler::cmpRules(PolicyRule &r1, PolicyRule &r2)
{
if (r1.getSrc()->getNeg()!=r2.getSrc()->getNeg()) return false;
if (r1.getDst()->getNeg()!=r2.getDst()->getNeg()) return false;
if (r1.getSrv()->getNeg()!=r2.getSrv()->getNeg()) return false;
if (r2.getSrc()->getNeg()!=r2.getSrc()->getNeg()) return false;
if (r2.getDst()->getNeg()!=r2.getDst()->getNeg()) return false;
if (r2.getSrv()->getNeg()!=r2.getSrv()->getNeg()) return false;
Address *src1=getFirstSrc(&r1);
Address *dst1=getFirstDst(&r1);
Service *srv1=getFirstSrv(&r1);
Address *src2=getFirstSrc(&r2);
Address *dst2=getFirstDst(&r2);
Service *srv2=getFirstSrv(&r2);
if (src1==NULL || dst1==NULL || srv1==NULL)
throw FWException("Can not compare rules because rule " +
r1.getLabel() +
" has a group in one of its elements. Aborting.");
if (src2==NULL || dst2==NULL || srv2==NULL)
throw FWException("Can not compare rules because rule " +
r2.getLabel() +
" has a group in one of its elements. Aborting.");
PolicyRule::Direction dir1=r1.getDirection();
PolicyRule::Direction dir2=r2.getDirection();
if (dir1==PolicyRule::Both) dir1=dir2;
if (dir2==PolicyRule::Both) dir2=dir1;
if (dir1!=dir2) return false;
return ( (*src1 == *src2) && (*dst1 == *dst2) && (*srv1 == *srv2) );
}
示例9: getNext
bool PolicyCompiler_pix::matchTranslatedAddresses::processNext()
{
PolicyRule *rule = getNext(); if (rule==nullptr) return false;
string version = compiler->fw->getStr("version");
transformed_rules.clear();
RuleElementSrc *srcrel = rule->getSrc();
RuleElementDst *dstrel = rule->getDst();
RuleElementSrv *srvrel = rule->getSrv();
for (list<FWObject*>::iterator i1=srcrel->begin(); i1!=srcrel->end(); ++i1)
{
for (list<FWObject*>::iterator i2=dstrel->begin(); i2!=dstrel->end(); ++i2)
{
for (list<FWObject*>::iterator i3=srvrel->begin(); i3!=srvrel->end(); ++i3)
{
FWObject *o1 = *i1;
FWObject *o2 = *i2;
FWObject *o3 = *i3;
FWObject *obj1 = nullptr;
FWObject *obj2 = nullptr;
FWObject *obj3 = nullptr;
obj1 = FWReference::getObject(o1);
Address *src = Address::cast(obj1);
assert(src!=nullptr);
obj2 = FWReference::getObject(o2);
Address *dst = Address::cast(obj2);
assert(dst!=nullptr);
obj3 = FWReference::getObject(o3);
Service *srv = Service::cast(obj3);
assert(srv!=nullptr);
list<NATRule*> tl = findMatchingNATRules(src, dst, srv);
for( list<NATRule*>::iterator t=tl.begin(); t!=tl.end(); ++t)
action(rule, *t, src, dst, srv);
}
}
}
/*
*list transformed_rules has all the atomic rules that have a matching
* NAT rule, with dst and srv already converted. We just add them to
* the policy on top of the original rule.
*/
list<PolicyRule*>::iterator i1;
for (i1=transformed_rules.begin(); i1!=transformed_rules.end(); ++i1)
{
PolicyRule *r=PolicyRule::cast( *i1 );
tmp_queue.push_back(r);
}
tmp_queue.push_back(rule);
return true;
}
示例10: assert
void PolicyCompiler_pix::replaceTranslatedAddresses::action(
PolicyRule* policy_rule,
NATRule* nat_rule, Address *src, Address*, Service *srv)
{
// FWObject *rule_iface = compiler->dbcopy->findInIndex(
// policy_rule->getInterfaceId());
RuleElementItf *intf_re = policy_rule->getItf();
FWObject *rule_iface = FWObjectReference::getObject(intf_re->front());
RuleElement *re = nat_rule->getOSrc();
FWObject *o = FWReference::getObject(re->front());
#ifndef NDEBUG
Address *osrc = Address::cast(o); assert(osrc);
#endif
re = nat_rule->getODst();
o = FWReference::getObject(re->front());
Address *odst = Address::cast(o); assert(odst);
re = nat_rule->getOSrv();
o = FWReference::getObject(re->front());
Service *osrv = Service::cast(o); assert(osrv);
#ifndef NDEBUG
re = nat_rule->getTSrc();
o = FWReference::getObject(re->front());
Address *tsrc = Address::cast(o); assert(tsrc);
re = nat_rule->getTDst();
o = FWReference::getObject(re->front());
Address *tdst = Address::cast(o); assert(tdst);
re = nat_rule->getTSrv();
o = FWReference::getObject(re->front());
Service *tsrv = Service::cast(o); assert(tsrv);
#endif
FWObject *p = odst->getParent();
if (odst->getId() == rule_iface->getId() ||
p->getId() == rule_iface->getId())
{
PolicyRule *r = compiler->dbcopy->createPolicyRule();
compiler->temp_ruleset->add(r);
r->duplicate(policy_rule);
RuleElementSrc *nsrc = r->getSrc();
nsrc->clearChildren();
nsrc->addRef( src );
RuleElementDst *ndst = r->getDst();
ndst->clearChildren();
ndst->addRef( odst );
RuleElementSrv *nsrv = r->getSrv();
nsrv->clearChildren();
if (osrv->isAny())
nsrv->addRef( srv );
else
nsrv->addRef( osrv );
transformed_rules.push_back(r);
}
}