forwardingObjective = builder.add(); break; case "REMOVE":
.makePermanent() .withFlag(ForwardingObjective.Flag.SPECIFIC) .add()); devices.add(ingress.deviceId());
private void setFlowRuleForTunnelTag(DeviceId deviceId, Port port, String vni) { TrafficSelector.Builder sBuilder = DefaultTrafficSelector.builder(); TrafficTreatment.Builder tBuilder = DefaultTrafficTreatment.builder(); sBuilder.matchEthType(Ethernet.TYPE_IPV4) .matchInPort(port.number()); tBuilder.setTunnelId(Long.parseLong(vni)); ForwardingObjective fo = DefaultForwardingObjective.builder() .withSelector(sBuilder.build()) .withTreatment(tBuilder.build()) .withPriority(TUNNELTAG_RULE_PRIORITY) .withFlag(ForwardingObjective.Flag.SPECIFIC) .fromApp(appId) .add(); flowObjectiveService.forward(deviceId, fo); }
/** * Builds a forwarding objective from the given selector, treatment and nextId. * * @param selector selector * @param treatment treatment to apply to packet, can be null * @param nextId next objective to point to for forwarding packet * @param add true to create an add objective, false to create a remove * objective * @return forwarding objective */ private ForwardingObjective buildForwardingObjective(TrafficSelector selector, TrafficTreatment treatment, int nextId, boolean add) { DefaultForwardingObjective.Builder fobBuilder = DefaultForwardingObjective.builder(); fobBuilder.withSelector(selector); if (treatment != null) { fobBuilder.withTreatment(treatment); } if (nextId != -1) { fobBuilder.nextStep(nextId); } fobBuilder.fromApp(appId) .withPriority(ACL_PRIORITY) .withFlag(ForwardingObjective.Flag.VERSATILE); return add ? fobBuilder.add() : fobBuilder.remove(); }
/** * Pushes packet intercept flow rules to the device. * * @param device the device to push the rules to * @param request the packet request */ private void pushRule(Device device, PacketRequest request) { if (!device.type().equals(Device.Type.SWITCH)) { return; } if (!deviceService.isAvailable(device.id())) { return; } ForwardingObjective forwarding = createBuilder(request) .add(new ObjectiveContext() { @Override public void onError(Objective objective, ObjectiveError error) { log.warn("Failed to install packet request {} to {}: {}", request, device.id(), error); } }); objectiveService.forward(device.id(), forwarding); }
/** * Sets the flow rules between traffic from VMs in different Cnode. * * @param vni VNI * @param deviceId device ID * @param hostIp host IP of the VM * @param vmIp fixed IP of the VM */ private void setVxLanFlowRule(String vni, DeviceId deviceId, Ip4Address hostIp, Ip4Address vmIp) { TrafficSelector.Builder sBuilder = DefaultTrafficSelector.builder(); TrafficTreatment.Builder tBuilder = DefaultTrafficTreatment.builder(); sBuilder.matchEthType(Ethernet.TYPE_IPV4) .matchTunnelId(Long.parseLong(vni)) .matchIPDst(vmIp.toIpPrefix()); tBuilder.extension(buildNiciraExtenstion(deviceId, hostIp), deviceId) .setOutput(getTunnelPort(deviceId)); ForwardingObjective fo = DefaultForwardingObjective.builder() .withSelector(sBuilder.build()) .withTreatment(tBuilder.build()) .withPriority(SWITCHING_RULE_PRIORITY) .withFlag(ForwardingObjective.Flag.SPECIFIC) .fromApp(appId) .add(); flowObjectiveService.forward(deviceId, fo); }
public static ForwardingObjective composeSequential(ForwardingObjective fo1, ForwardingObjective fo2, int priorityMultiplier) { TrafficSelector revertTrafficSelector = revertTreatmentSelector(fo1.treatment(), fo2.selector()); if (revertTrafficSelector == null) { return null; } TrafficSelector trafficSelector = intersectTrafficSelector(fo1.selector(), revertTrafficSelector); if (trafficSelector == null) { return null; } TrafficTreatment trafficTreatment = unionTrafficTreatment(fo1.treatment(), fo2.treatment()); return DefaultForwardingObjective.builder() .fromApp(fo1.appId()) .makePermanent() .withFlag(ForwardingObjective.Flag.VERSATILE) .withPriority(fo1.priority() * priorityMultiplier + fo2.priority()) .withSelector(trafficSelector) .withTreatment(trafficTreatment) .add(); }
/** * Sets the flow rules for traffic between VMs in the same Cnode. * * @param ip4Address VM IP address * @param id device ID to put rules * @param port VM port * @param vni VM VNI */ private void setFlowRuleForVMsInSameCnode(Ip4Address ip4Address, DeviceId id, Port port, String vni) { //For L2 Switching Case TrafficSelector.Builder sBuilder = DefaultTrafficSelector.builder(); TrafficTreatment.Builder tBuilder = DefaultTrafficTreatment.builder(); sBuilder.matchEthType(Ethernet.TYPE_IPV4) .matchIPDst(ip4Address.toIpPrefix()) .matchTunnelId(Long.parseLong(vni)); tBuilder.setOutput(port.number()); ForwardingObjective fo = DefaultForwardingObjective.builder() .withSelector(sBuilder.build()) .withTreatment(tBuilder.build()) .withPriority(SWITCHING_RULE_PRIORITY) .withFlag(ForwardingObjective.Flag.SPECIFIC) .fromApp(appId) .add(); flowObjectiveService.forward(id, fo); }
public static ForwardingObjective composeParallel(ForwardingObjective fo1, ForwardingObjective fo2) { TrafficSelector trafficSelector = intersectTrafficSelector(fo1.selector(), fo2.selector()); if (trafficSelector == null) { return null; } TrafficTreatment trafficTreatment = unionTrafficTreatment(fo1.treatment(), fo2.treatment()); return DefaultForwardingObjective.builder() .fromApp(fo1.appId()) .makePermanent() .withFlag(ForwardingObjective.Flag.VERSATILE) .withPriority(fo1.priority() + fo2.priority()) .withSelector(trafficSelector) .withTreatment(trafficTreatment) .add(); }
public static ForwardingObjective composeOverride(ForwardingObjective fo, int priorityAddend) { return DefaultForwardingObjective.builder() .fromApp(fo.appId()) .makePermanent() .withFlag(fo.flag()) .withPriority(fo.priority() + priorityAddend) .withSelector(fo.selector()) .withTreatment(fo.treatment()) .add(); }
private ForwardingObjective buildForwardingObjective(TrafficSelector selector, Integer nextId, int priority) { return DefaultForwardingObjective.builder() .withMeta(selector) .withSelector(selector) .nextStep(nextId) .fromApp(appId) .withPriority(priority) .withFlag(ForwardingObjective.Flag.SPECIFIC) .makePermanent() .add(); }