opendaylight:Genius在交换机中安装流程

时间:2017-09-13 20:39:28

标签: openflow opendaylight genius-api

我正在使用opendaylight / Carbon,并尝试使用Genius包装器。我想基于传入数据包的MAC地址匹配在交换机中安装流。我要安装的说明是" GOTO"指令。我按以下步骤进行:

     FlowEntityBuilder flowEntityBuilder = new FlowEntityBuilder();
    flowEntityBuilder.setTableId(tableId)
        .setDpnId(dpnId)
        .setFlowId(FlowUtils.createFlowId().toString())
        .setFlowName("gotoTable1");

    MatchInfo matchInfo = new MatchEthernetSource(macAddress);


    InstructionInfo instructionInfo = new InstructionGotoTable(tableId);
    FlowEntity flowEntity = flowEntityBuilder.addInstructionInfoList(instructionInfo).addMatchInfoList(matchInfo).build();
    mdsalApiManager.installFlow(dpnId,flowEntity);

Mu的目的是创建一个流实体并使用IMDSalApiManager.installFlow方法安装它。

以下是我看到的例外情况:

java.lang.IllegalArgumentException: Node (urn:opendaylight:flow:inventory?revision=2013-08-19)ethernet-source is missing mandatory descendant /(urn:opendaylight:flow:inventory?revision=2013-08-19)address

任何帮助调试此功能都将受到赞赏。

2 个答案:

答案 0 :(得分:0)

结果证明我提供的MacAddress是null的问题。我解决了这个问题。但是我仍然看不到开关中的流量。

答案 1 :(得分:0)

这是使用OpenDaylight构建GOTO指令的方法:

GoToTableBuilder gttb = new GoToTableBuilder();
gttb.setTableId(tableGoto);

Instruction gotoInstruction = new InstructionBuilder()
    .setOrder(1).setInstruction(new GoToTableCaseBuilder()
        .setGoToTable(gttb.build())
        .build())
    .build();

您可以使用它来调整代码。