は、私は次の同等をしたい:VLAN設定フローの作成方法は?
sudo ovs-ofctl add-flow s1 table=2,metadata=1379878762,actions=push_vlan:0x8100,mod_vlan_vid:4000,output:6,goto_table:4 -O openflow13
どのように私はopendaylight Javaコードでこれを行うことができますか?私は見つけることができるいくつかの例に基づいて試みましたが、フローが現れなかったり、時には十分な微調整を行ってフローの一部を表示することができました(私は出力アクションを見ることができませんでした)。私は私の開発にCarbon(最新のカーボン版)を使用しています。夜間のスナップショットに切り替える価値はありますか?
opendaylightでこれを行うと、vlanと関係がある動作がフローに表示されないことがわかります。フローにはgotoだけが表示されます。
=== === UPDATE
私は(下記の答えによって提案された)、VLANタグを設定して作成するには、次のJavaコードを使用します。
private static Instruction createSetVlanAndOutputToPortInstructions(int vlanId,
String outputPortUri) {
List<Action> actionList = new ArrayList<>();
ActionBuilder ab = new ActionBuilder();
Integer VLAN_ETHERTYPE = 0x8100;
ActionBuilder actionBuilder = new ActionBuilder();
//push vlan
Action pushVlanAction = actionBuilder
.setOrder(0).setAction(new PushVlanActionCaseBuilder()
.setPushVlanAction(new PushVlanActionBuilder()
.setEthernetType(VLAN_ETHERTYPE)
.build())
.build())
.build();
actionList.add(pushVlanAction);
//set vlan id
SetVlanIdActionBuilder tab = new SetVlanIdActionBuilder();
tab.setVlanId(new VlanId((int) vlanId));
SetVlanIdActionCaseBuilder vidcb = new SetVlanIdActionCaseBuilder();
vidcb.setSetVlanIdAction(tab.build());
Action setVlanIdAction = actionBuilder.setOrder(1).setAction(vidcb.build()).build();
OutputActionBuilder output = new OutputActionBuilder();
output.setMaxLength(Integer.valueOf(0xffff));
Uri controllerPort = new Uri(outputPortUri);
output.setOutputNodeConnector(controllerPort);
ab = new ActionBuilder();
ab.setKey(new ActionKey(0));
ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
ab.setOrder(2);
actionList.add(ab.build());
ApplyActionsBuilder aab = new ApplyActionsBuilder();
aab.setAction(actionList);
InstructionBuilder ib = new InstructionBuilder();
ib.setKey(new InstructionKey(0));
ib.setInstruction(new ApplyActionsCaseBuilder().setApplyActions(aab.build()).build());
return ib.build();
}
フロールールを作成するコードがありますここに:私はopenvswitchでこれを参照してくださいコードを呼び出す際に
FlowBuilder tagPacketFlow = new FlowBuilder().setTableId((short) tableId)
.setFlowName("metadataMatchSetVlanTagSendToPortAndGoToStripVlanTagTable").setId(flowId)
.setKey(new FlowKey(flowId)).setCookie(flowCookie);
MatchBuilder matchBuilder = new MatchBuilder();
createMetadataMatch(matchBuilder, flowCookie.getValue());
InstructionBuilder ib = new InstructionBuilder();
Instruction createVlanTag = FlowUtils.createSetVlanAndOutputToPortInstructions(
SdnMudConstants.MUD_RULE_HIT_LABEL, outputPortUri);
InstructionsBuilder insb = new InstructionsBuilder();
ArrayList<Instruction> instructions = new ArrayList<Instruction>();
instructions.add(createVlanTag);
Instruction gotoInstruction = ib.setInstruction(new GoToTableCaseBuilder()
.setGoToTable(new GoToTableBuilder().setTableId(SdnMudConstants.STRIP_VLAN_RULE_TABLE).build()).build())
.setOrder(3)
.setKey(new InstructionKey(0)).build();
instructions.add(gotoInstruction);
insb.setInstruction(instructions);
tagPacketFlow.setMatch(matchBuilder.build()).setInstructions(insb.build())
.setPriority(35).setBufferId(OFConstants.ANY)
.setHardTimeout(time).setIdleTimeout(0).setFlags(new FlowModFlags(false, false, false, false, false));
:
cookie=0x523f476a, duration=0.012s, table=2, n_packets=0, n_bytes=0, hard_timeout=30000, priority=35,metadata=0x523f476a actions=goto_table:3
そして、ここでは、この流れに対応するコンフィグデータストアからのダンプです:
{
"buffer_id": 4294967295,
"cookie": 1379878762,
"flags": "",
"flow-name": "metadataMatchSetVlanTagSendToPortAndGoToStripVlanTagTable",
"hard-timeout": 30000,
"id": "toaster.nist.gov/42",
"idle-timeout": 0,
"instructions": {
"instruction": [
{
"go-to-table": {
"table_id": 3
},
"order": 0
}
]
},
"match": {
"metadata": {
"metadata": 1379878762
}
},
"priority": 35,
"table_id": 2
}
だから、VLAN設定はちょうど消えました。
====エンドUPDATE ====
==== UPDATE 1 ====
私は、トランザクションをコミットする前に流れをログに記録。設定されたVLAN命令は次のとおりです。
ApplyActionsCase [_applyActions=ApplyActions
[_action=[Action [_action=PushVlanActionCase
[_pushVlanAction=PushVlanAction [_ethernetType=33024,
_vlanId=VlanId [_value=1001], augmentation=[]], augmentation=[]],
_key=ActionKey [_order=0], _order=0, augmentation=[]],
Action [_action=SetVlanIdActionCase[_setVlanIdAction=SetVlanIdAction
[_vlanId=VlanId [_value=1001], augmentation=[]],
augmentation=[]], _key=ActionKey [_order=1], _order=1,
augmentation=[]], Action [_action=OutputActionCase
[_outputAction=OutputAction [_maxLength=65535,
_outputNodeConnector=Uri [_value=openflow:1:6],
augmentation=[]], augmentation=[]],
_key=ActionKey [_order=2], _order=2,
augmentation=[]]], augmentation=[]], augmentation=[]]
私は間違ったことはありません。
===エンドUPDATE 1 ===
===アップデート2 ===私は後藤を削除し、ここでは、XMLのパターンに従う
それgotoなしでのみ動作します。言い換えれば、私がgotoを削除すると、設定データストアでプッシュフローが表示されます。私がgotoを入れると、gotoだけが現れます。
====終了アップデート2 ====
私はopendaylight soutboundでVLANフローに関する課題追跡で問題が破壊されるが、2014年に修正されているよう参照(?)。
これは窒素で固定されていますか?opendaylightに対して不具合を提出するにはどうすればよいですか?
残念ながら動作しませんでした。私のテーブルはまだあります:クッキー= 0x523f476a、期間= 0.012s、テーブル= 2、n_packets = 0、n_bytes = 0、ハード_タイムアウト= 30000、プライオリティ= 35、メタデータ= 0x523f476aアクション= goto_table:3。 – LostInTheFrequencyDomain
上記の更新をご覧ください。助けてくれてありがとう。 – LostInTheFrequencyDomain
なぜsetFieldはVlanMatchBuilder()と同じですか?私はプログラミングモデルについて混乱しています。 – LostInTheFrequencyDomain