public static int forwardingObjectiveHash(ForwardingObjective forwardingObjective) { return Objects.hash(forwardingObjective.selector(), forwardingObjective.flag(), forwardingObjective.permanent(), forwardingObjective.timeout(), forwardingObjective.appId(), forwardingObjective.priority(), forwardingObjective.nextId(), forwardingObjective.treatment()); } }
private Collection<FlowRule> processForward(ForwardingObjective fwd) { log.debug("Processing forwarding object"); FlowRule.Builder ruleBuilder = DefaultFlowRule.builder() .forDevice(deviceId) .withSelector(fwd.selector()) .withTreatment(fwd.treatment()) .withPriority(fwd.priority()) .fromApp(fwd.appId()) .forTable(SOFTWARE_TABLE_START); if (fwd.permanent()) { ruleBuilder.makePermanent(); } else { ruleBuilder.makeTemporary(TIME_OUT); } return Collections.singletonList(ruleBuilder.build()); }
private Collection<FlowRule> processVersatile(ForwardingObjective fwd) { log.debug("Processing versatile forwarding objective"); TrafficSelector selector = fwd.selector(); TrafficTreatment tb = fwd.treatment(); FlowRule.Builder ruleBuilder = DefaultFlowRule.builder().fromApp(fwd.appId()).withPriority(fwd.priority()) .forDevice(deviceId).withSelector(selector).withTreatment(tb).makeTemporary(TIME_OUT); ruleBuilder.withPriority(fwd.priority()); if (fwd.priority() == 100) { ruleBuilder.forTable(ENCAP_OUTPUT_TABLE); } else if (fwd.priority() == 200) { ruleBuilder.forTable(TUN_SEND_TABLE); } else { ruleBuilder.forTable(CLASSIFIER_TABLE); } if (fwd.permanent()) { ruleBuilder.makePermanent(); } return Collections.singletonList(ruleBuilder.build()); }
.withSelector(filteredSelector) .withTreatment(tt); if (fwd.permanent()) { ruleBuilder.makePermanent(); } else {
.withTreatment(filteredTreatment) .forTable(BRIDGING_TABLE); if (fwd.permanent()) { flowRuleBuilder.makePermanent(); } else {
if (fwd.permanent()) { ruleBuilder.makePermanent(); } else {
private Collection<FlowRule> processVersatile(ForwardingObjective forwardingObjective) { log.debug("Processing versatile forwarding objective"); FlowRule.Builder ruleBuilder = DefaultFlowRule.builder() .forDevice(deviceId) .withSelector(forwardingObjective.selector()) .withTreatment(forwardingObjective.treatment()) .withPriority(forwardingObjective.priority()) .fromApp(forwardingObjective.appId()); if (forwardingObjective.permanent()) { ruleBuilder.makePermanent(); } else { ruleBuilder.makeTemporary(TIME_OUT); } //ARP & DHCP Rule EthTypeCriterion ethCriterion = (EthTypeCriterion) forwardingObjective.selector().getCriterion(Criterion.Type.ETH_TYPE); UdpPortCriterion udpPortCriterion = (UdpPortCriterion) forwardingObjective .selector().getCriterion(Criterion.Type.UDP_DST); if (ethCriterion != null) { if (ethCriterion.ethType().toShort() == Ethernet.TYPE_ARP || ethCriterion.ethType().toShort() == Ethernet.TYPE_LLDP) { ruleBuilder.forTable(VNI_TABLE); return Collections.singletonList(ruleBuilder.build()); } else if (udpPortCriterion != null && udpPortCriterion.udpPort().toInt() == DHCP_SERVER_PORT) { ruleBuilder.forTable(VNI_TABLE); return Collections.singletonList(ruleBuilder.build()); } } return Collections.emptySet(); }
.withTreatment(filteredTreatment) .forTable(BRIDGING_TABLE); if (fwd.permanent()) { flowRuleBuilder.makePermanent(); } else {
.withTreatment(treatmentBuilder.build()); if (fwd.permanent()) { ruleBuilder.makePermanent(); } else {
.fromApp(forwardingObjective.appId()); if (forwardingObjective.permanent()) { ruleBuilder.makePermanent(); } else {
.withTreatment(tb.build()); if (fwd.permanent()) { ruleBuilder.makePermanent(); } else {
.withTreatment(treatment); if (fwd.permanent()) { ruleBuilder.makePermanent(); } else {
.withTreatment(filteredTreatment) .forTable(dstMacTableId); if (fwd.permanent()) { flowRuleBuilder.makePermanent(); } else {
.withTreatment(treatment); if (fwd.permanent()) { ruleBuilder.makePermanent(); } else {
.withTreatment(tb).makeTemporary(TIME_OUT); ruleBuilder.withPriority(fwd.priority()); if (fwd.permanent()) { ruleBuilder.makePermanent();