PortNumber inPort) { FilteringObjective.Builder builder = DefaultFilteringObjective.builder(); builder.fromApp(appId) .permit() .makePermanent() .withPriority(intent.priority()); Criterion inPortCriterion = selector.getCriterion(Criterion.Type.IN_PORT); if (inPortCriterion != null) { builder.withKey(inPortCriterion); builder.addCondition(criterion); emptyCondition.set(false); }); return builder.add(); switch (encap.encapType()) { case VLAN: builder.addCondition(selector.getCriterion(Criterion.Type.VLAN_VID)); emptyCondition.set(false); break; case MPLS: builder.addCondition(selector.getCriterion(Criterion.Type.MPLS_LABEL)); emptyCondition.set(false); break; .filter(criterion -> !criterion.type().equals(Criterion.Type.IN_PORT)) .forEach(criterion -> { builder.addCondition(criterion);
private void sendFilteringObjective(boolean install, FilteringObjective.Builder fob, Interface intf) { ObjectiveContext context = new DefaultObjectiveContext( (objective) -> log.info("Installed filter for interface {}", intf), (objective, error) -> log.error("Failed to install filter for interface {}: {}", intf, error)); FilteringObjective filter = install ? fob.add(context) : fob.remove(context); flowObjectiveService.filter(deviceId, filter); }
private void createFilteringObjective(boolean install, Interface intf) { VlanId assignedVlan = (egressVlan().equals(VlanId.NONE)) ? VlanId.vlanId(ASSIGNED_VLAN) : egressVlan(); FilteringObjective.Builder fob = DefaultFilteringObjective.builder(); // first add filter for the interface fob.withKey(Criteria.matchInPort(intf.connectPoint().port())) .addCondition(Criteria.matchEthDst(intf.mac())) .addCondition(Criteria.matchVlanId(intf.vlan())); fob.withPriority(PRIORITY_OFFSET); if (intf.vlan() == VlanId.NONE) { TrafficTreatment tt = DefaultTrafficTreatment.builder() .pushVlan().setVlanId(assignedVlan).build(); fob.withMeta(tt); } fob.permit().fromApp(routerAppId); sendFilteringObjective(install, fob, intf); if (controlPlaneConnectPoint != null) { // then add the same mac/vlan filters for control-plane connect point fob.withKey(Criteria.matchInPort(controlPlaneConnectPoint.port())); sendFilteringObjective(install, fob, intf); } }
private void createMcastFilteringObjective(boolean install, Interface intf) { VlanId assignedVlan = (egressVlan().equals(VlanId.NONE)) ? VlanId.vlanId(ASSIGNED_VLAN) : egressVlan(); FilteringObjective.Builder fob = DefaultFilteringObjective.builder(); // first add filter for the interface fob.withKey(Criteria.matchInPort(intf.connectPoint().port())) .addCondition(Criteria.matchEthDstMasked(MacAddress.IPV4_MULTICAST, MacAddress.IPV4_MULTICAST_MASK)) .addCondition(Criteria.matchVlanId(ingressVlan())); fob.withPriority(PRIORITY_OFFSET); TrafficTreatment tt = DefaultTrafficTreatment.builder() .pushVlan().setVlanId(assignedVlan).build(); fob.withMeta(tt); fob.permit().fromApp(routerAppId); sendFilteringObjective(install, fob, intf); }