我正在使用opendaylight(Carbon)并打开VSwitch。我正在java中构建一个应用程序,我想将数据包发送到多个GoTo目标表。以下代码片段显示了我如何构建指令:
private static InstructionsBuilder createGoToNextTableInstruction(short idstable, short l2switchTable) {
// Create an instruction allowing the interaction.
List<Instruction> instructions = new ArrayList<Instruction>();
Instruction gotoIdsTableInstruction = new InstructionBuilder()
.setInstruction(new GoToTableCaseBuilder()
.setGoToTable(new GoToTableBuilder().setTableId(idstable).build()).build())
.setKey(new InstructionKey(getInstructionKey())).setOrder(0).build();
instructions.add(gotoIdsTableInstruction);
Instruction gotoL2SwitchInstruction = new InstructionBuilder()
.setInstruction(new GoToTableCaseBuilder()
.setGoToTable(new GoToTableBuilder().setTableId(l2switchTable).build()).build())
.setKey(new InstructionKey(getInstructionKey())).setOrder(1).build();
instructions.add(gotoL2SwitchInstruction);
InstructionsBuilder isb = new InstructionsBuilder();
isb.setInstruction(instructions);
return isb;
}
说明用于构建流规则如下:
flowBuilder.setMatch(match).setInstructions(isb.build()).setPriority(30)
.setBufferId(OFConstants.ANY).setHardTimeout(0).setIdleTimeout(0)
.setFlags(new FlowModFlags(false, false, false, false, false));
我运行应用程序,不会抛出任何异常。但是,当我在交换机上列出流规则时,流程从未安装过。当我有一个GoTo指令时,我可以在交换机上成功安装流程,但是当我有多个GoTo指令时,我不能成功安装流程。
我的问题是:
我尝试了以下内容:
sudo ovs-ofctl -O OpenFlow13 add-flow s1 table=0,in_port=2,actions=goto_table:1,goto_table:2
ovs-ofctl: instruction goto_table may be specified only once
这是我的版本:
ovs-ofctl --version
ovs-ofctl (Open vSwitch) 2.4.1
Compiled Sep 25 2016 21:59:05
OpenFlow versions 0x1:0x4
这是一个ovs版本的问题吗?
感谢。
答案 0 :(得分:0)
我确认在openflow中的单个流规则中确实不可能有多个GoTo目标。只是为了别人的利益而在这里跟进。