public ForwardUpdateTable updateForward(ForwardingObjective forwardingObjective) { ForwardUpdateTable updates = new ForwardUpdateTable(); switch (forwardingObjective.op()) { case ADD: this.forwardMap.put(forwardingObjectiveHash(forwardingObjective), forwardingObjective); this.generatedParentForwardingObjectiveMap .put(forwardingObjectiveHash(forwardingObjective), new ArrayList<>()); updates.addObjectives.add(forwardingObjective); break; case REMOVE: if (this.forwardMap.remove(forwardingObjectiveHash(forwardingObjective)) != null) { updates.removeObjectives.add(forwardingObjective); } break; default: break; } return updates; }
switch (forwardObjective.op()) { case ADD: rules.stream()
switch (forwardingObjective.op()) { case ADD: rules.stream()
private void applyRules(ForwardingObjective fwd, FlowRule.Builder inner, FlowRule.Builder outer) { FlowRuleOperations.Builder builder = FlowRuleOperations.builder(); switch (fwd.op()) { case ADD: builder.add(inner.build()).add(outer.build()); break; case REMOVE: builder.remove(inner.build()).remove(outer.build()); break; case ADD_TO_EXISTING: break; case REMOVE_FROM_EXISTING: break; default: log.warn("Unknown forwarding operation: {}", fwd.op()); } applyFlowRules(builder, fwd); }
@Override public ObjectNode encode(ForwardingObjective forwardingObjective, CodecContext context) { checkNotNull(forwardingObjective, NOT_NULL_MESSAGE); final JsonCodec<TrafficTreatment> trafficTreatmentCodec = context.codec(TrafficTreatment.class); final JsonCodec<TrafficSelector> trafficSelectorCodec = context.codec(TrafficSelector.class); // encode common properties ObjectiveCodecHelper och = new ObjectiveCodecHelper(); ObjectNode result = och.encode(forwardingObjective, context); // encode id result.put(ID, forwardingObjective.id()); // encode flag result.put(FLAG, forwardingObjective.flag().toString()); // encode op result.put(OPERATION, forwardingObjective.op().toString()); // encode selector ObjectNode trafficSelectorNode = trafficSelectorCodec.encode(forwardingObjective.selector(), context); result.set(SELECTOR, trafficSelectorNode); // encode nextId if (forwardingObjective.nextId() != null) { result.put(NEXT_ID, forwardingObjective.nextId()); } // encode treatment if (forwardingObjective.treatment() != null) { ObjectNode trafficTreatmentNode = trafficTreatmentCodec.encode(forwardingObjective.treatment(), context); result.set(TREATMENT, trafficTreatmentNode); } return result; }