private Future<RpcResult<AddFlowOutput>> writeFlowToController(InstanceIdentifier<Node> nodeInstanceId, InstanceIdentifier<Table> tableInstanceId, InstanceIdentifier<Flow> flowPath, Flow flow) { LOG.trace("Adding flow to node {}",nodeInstanceId.firstKeyOf(Node.class, NodeKey.class).getId().getValue()); final AddFlowInputBuilder builder = new AddFlowInputBuilder(flow); builder.setNode(new NodeRef(nodeInstanceId)); builder.setFlowRef(new FlowRef(flowPath)); builder.setFlowTable(new FlowTableRef(tableInstanceId)); builder.setTransactionUri(new Uri(flow.getId().getValue())); return salFlowService.addFlow(builder.build()); } }
@Override public Future<RpcResult<Void>> testFlow(TestFlowInput input) { AddFlowInputBuilder flow = new AddFlowInputBuilder(); flow.setPriority(2); flow.setMatch(createMatchBld().build()); flow.setInstructions(createDecNwTtlInstructionsBld().build()); flow.setBarrier(Boolean.FALSE); BigInteger value = BigInteger.valueOf(10L); flow.setCookie(new FlowCookie(value)); flow.setCookieMask(new FlowCookie(value)); flow.setHardTimeout(0); flow.setIdleTimeout(0); flow.setInstallHw(false); flow.setStrict(false); flow.setContainerName(null); flow.setFlags(new FlowModFlags(false, false, false, false, true)); flow.setTableId((short) 0); flow.setFlowName("NiciraFLOW"); // Construct the flow instance id final InstanceIdentifier<Node> flowInstanceId = InstanceIdentifier .builder(Nodes.class) // File under nodes .child(Node.class, new NodeKey(new NodeId("openflow:1"))).build(); // A particular node identified by nodeKey flow.setNode(new NodeRef(flowInstanceId)); pushFlowViaRpc(flow.build()); return Futures.immediateFuture(RpcResultBuilder.<Void>status(true).build()); }
@Override protected AddFlowInputBuilder initialValue() { final AddFlowInputBuilder fb = new AddFlowInputBuilder(); fb.setPriority(PRIORITY); fb.setBufferId(BUFFER_ID); final FlowCookie cookie = new FlowCookie(BigInteger.TEN); fb.setCookie(cookie); fb.setCookieMask(cookie); fb.setTableId(TABLE_ID); fb.setHardTimeout(HARD_TIMEOUT); fb.setIdleTimeout(IDLE_TIMEOUT); fb.setFlags(new FlowModFlags(false, false, false, false, false)); return fb; } };
public static AddFlowInput addFlowInput(final Node sourceNode, final Flow sourceFlow) { final FlowAdded source = MDFlowMapping.flowAdded(sourceFlow); return new AddFlowInputBuilder(((org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.Flow) source)) .setNode(NodeMapping.toNodeRef(sourceNode)) .build(); }
@Override protected void processPacket(final InstanceIdentifier<Node> node, final Match match, final Instructions instructions) { final AddFlowInputBuilder fb = BUILDER.get(); // Finally build our flow fb.setMatch(match); fb.setInstructions(instructions); // Construct the flow instance id fb.setNode(new NodeRef(node)); // Add flow final AddFlowInput flow = fb.build(); if (LOG.isDebugEnabled()) { LOG.debug("onPacketReceived - About to write flow (via SalFlowService) {}", flow); } ListenableFuture<RpcResult<AddFlowOutput>> result = JdkFutureAdapters.listenInPoolThread(flowService.addFlow(flow)); Futures.addCallback(result, new FutureCallback<RpcResult<AddFlowOutput>>() { @Override public void onSuccess(final RpcResult<AddFlowOutput> o) { countFutureSuccess(); } @Override public void onFailure(final Throwable throwable) { countFutureError(); } }); }
return new AddFlowInputBuilder(). setNode(snode.getNodeRef()). setFlowRef(fref). setFlowTable(tref). setTransactionUri(new Uri("table-miss:" + table)). setCookie(COOKIE_MISS). setPriority(0). setTableId(table). setIdleTimeout(0). setHardTimeout(0). setMatch(EMPTY_MATCH). setFlags(FLOW_MOD_FLAGS). setInstructions(inst). build();
Future<RpcResult<AddFlowOutput>> addFlowResult = flowService.addFlow(new AddFlowInputBuilder( arpReplyToControllerFlow).setFlowRef(new FlowRef(flowIid)).setNode(nodeRef).build());
private static Optional<? extends Flow> injectMatchAndAction(Flow sourceFlow, Match match) { Instructions instructions = (new InstructionsBuilder()) .setInstruction(injectPushActionToInstruction(sourceFlow)) .build(); if (sourceFlow instanceof AddFlowInput) { return Optional.of(new AddFlowInputBuilder(sourceFlow) .setMatch(match).setInstructions(instructions).build()); } else if (sourceFlow instanceof RemoveFlowInput) { return Optional.of(new RemoveFlowInputBuilder(sourceFlow) .setMatch(match).setInstructions(instructions).build()); } else if (sourceFlow instanceof UpdatedFlow) { return Optional.of(new UpdatedFlowBuilder(sourceFlow) .setMatch(match).setInstructions(instructions).build()); } else { return Optional.empty(); } }
private static Optional<? extends Flow> injectMatchToFlow(Flow sourceFlow, Match match) { if (sourceFlow instanceof AddFlowInput) { return Optional.of(new AddFlowInputBuilder(sourceFlow).setMatch(match).build()); } else if (sourceFlow instanceof RemoveFlowInput) { return Optional.of(new RemoveFlowInputBuilder(sourceFlow).setMatch(match).build()); } else if (sourceFlow instanceof UpdatedFlow) { return Optional.of(new UpdatedFlowBuilder(sourceFlow).setMatch(match).build()); } else { return Optional.empty(); } }
nodeRef).build(), l3Ep.getKey())); final InstanceIdentifier<Flow> flowIid = createFlowIid(arpReplyToControllerFlow, nodeIid); Future<RpcResult<AddFlowOutput>> futureAddFlowResult = flowService.addFlow(new AddFlowInputBuilder( arpReplyToControllerFlow).setFlowRef(new FlowRef(flowIid)).setNode(nodeRef).build()); arpFlowResultFutures.add(JdkFutureAdapters.listenInPoolThread(futureAddFlowResult));
@Override public void onDataTreeChanged(@Nonnull final Collection<DataTreeModification<FlowCapableNode>> modifications) { for (DataTreeModification modification : modifications) { if (modification.getRootNode().getModificationType() == ModificationType.WRITE) { AddFlowInputBuilder addFlowInput = new AddFlowInputBuilder(createFlow()); addFlowInput.setNode(new NodeRef(modification.getRootPath().getRootIdentifier().firstIdentifierOf(Node.class))); this.flowService.addFlow(addFlowInput.build()); } } }
private Future<RpcResult<AddFlowOutput>> writeFlowToController(InstanceIdentifier<Node> nodeInstanceId, InstanceIdentifier<Table> tableInstanceId, InstanceIdentifier<Flow> flowPath, Flow flow) { LOG.trace("Adding flow to node {}",nodeInstanceId.firstKeyOf(Node.class, NodeKey.class).getId().getValue()); final AddFlowInputBuilder builder = new AddFlowInputBuilder(flow); builder.setNode(new NodeRef(nodeInstanceId)); builder.setFlowRef(new FlowRef(flowPath)); builder.setFlowTable(new FlowTableRef(tableInstanceId)); builder.setTransactionUri(new Uri(flow.getId().getValue())); return salFlowService.addFlow(builder.build()); } }
/** * Starts and commits data change transaction which modifies provided flow * path with supplied body. * * @param flowPath * @param flow * @return transaction commit */ private Future<RpcResult<AddFlowOutput>> writeFlowToConfigData(InstanceIdentifier<Flow> flowPath, Flow flow) { final InstanceIdentifier<Table> tableInstanceId = flowPath.<Table>firstIdentifierOf(Table.class); final InstanceIdentifier<Node> nodeInstanceId = flowPath.<Node>firstIdentifierOf(Node.class); final AddFlowInputBuilder builder = new AddFlowInputBuilder(flow); builder.setNode(new NodeRef(nodeInstanceId)); builder.setFlowRef(new FlowRef(flowPath)); builder.setFlowTable(new FlowTableRef(tableInstanceId)); builder.setTransactionUri(new Uri(flow.getId().getValue())); return salFlowService.addFlow(builder.build()); } }
@Override public Future<RpcResult<AddFlowOutput>> add( final InstanceIdentifier<Flow> identifier, final Flow addDataObj, final InstanceIdentifier<FlowCapableNode> nodeIdent) { Future<RpcResult<AddFlowOutput>> future; final TableKey tableKey = identifier.firstKeyOf(Table.class, TableKey.class); if (tableIdValidationPrecondition(tableKey, addDataObj)) { final AddFlowInputBuilder builder = new AddFlowInputBuilder(addDataObj); builder.setNode(new NodeRef(nodeIdent.firstIdentifierOf(Node.class))); builder.setFlowRef(new FlowRef(identifier)); builder.setFlowTable(new FlowTableRef(nodeIdent.child(Table.class, tableKey))); builder.setTransactionUri(new Uri(provider.getNewTransactionId())); future = provider.getSalFlowService().addFlow(builder.build()); } else { future = Futures.<RpcResult<AddFlowOutput>>immediateFuture(null); } return future; }
/** * Construct an RPC input to install the specified flow entry. * * @param flowId A VTN flow ID. * @param vfent A {@link VtnFlowEntry} instance. * @return A {@link AddFlowInput} instance. */ public static AddFlowInput createAddFlowInput(VtnFlowId flowId, VtnFlowEntry vfent) { SalNode snode = SalNode.create(vfent.getNode()); Short table = vfent.getTableId(); FlowTableRef tref = new FlowTableRef(snode.getFlowTableIdentifier(table)); // Associate a unique MD-SAL flow ID. FlowId fid = createMdFlowId(flowId.getValue(), vfent.getOrder()); FlowRef fref = new FlowRef(snode.getFlowIdentifier(table, fid)); return new AddFlowInputBuilder((Flow)vfent). setNode(snode.getNodeRef()). setFlowRef(fref). setFlowTable(tref). setTransactionUri(createTxUri(vfent, "add-flow:")). setStrict(true). build(); }
/** * Starts and commits data change transaction which modifies provided * flow path with supplied body. */ private Future<RpcResult<AddFlowOutput>> writeFlowToSwitch(NodeId nodeId, Flow flow) { InstanceIdentifier<Node> nodeInstanceId = InstanceIdentifier.<Nodes>builder(Nodes.class) .<Node, NodeKey>child(Node.class, new NodeKey(nodeId)).build(); InstanceIdentifier<Table> tableInstanceId = nodeInstanceId .<FlowCapableNode>augmentation(FlowCapableNode.class) .<Table, TableKey>child(Table.class, new TableKey(flowTableId)); InstanceIdentifier<Flow> flowPath = tableInstanceId.<Flow, FlowKey>child(Flow.class, new FlowKey(new FlowId(String.valueOf(flowIdInc.getAndIncrement())))); final AddFlowInputBuilder builder = new AddFlowInputBuilder(flow).setNode(new NodeRef(nodeInstanceId)) .setFlowTable(new FlowTableRef(tableInstanceId)).setFlowRef(new FlowRef(flowPath)) .setTransactionUri(new Uri(flow.getId().getValue())); return salFlowService.addFlow(builder.build()); } }
Flow lacpFlow = createLacpFlow(); final AddFlowInputBuilder builder = new AddFlowInputBuilder(lacpFlow); builder.setNode(new NodeRef(nodeId)); builder.setFlowRef(new FlowRef(lacpFId)); builder.setFlowTable(new FlowTableRef(tableId)); builder.setTransactionUri(new Uri(lacpFlow.getId().getValue())); try Future<RpcResult<AddFlowOutput>> result = salFlow.addFlow(builder.build()); if (result != null)
Flow flowToSend = flowBuilder.build(); final AddFlowInputBuilder builder = new AddFlowInputBuilder(flowToSend); builder.setNode(new NodeRef(nodeInstanceId)); builder.setFlowRef(new FlowRef(flowPath)); builder.setFlowTable(new FlowTableRef(tableInstanceId)); builder.setTransactionUri(new Uri(flowToSend.getId().getValue())); final Future<RpcResult<AddFlowOutput>> rpcResultFuture = flowService.addFlow(builder.build()); try{ if(rpcResultFuture != null){