use of org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie in project openflowplugin by opendaylight.
the class OpenflowpluginTestCommandProvider method createTestFlow.
private FlowBuilder createTestFlow(final NodeBuilder nodeBuilder, final String flowTypeArg, final String tableId) {
final long TEST_ID = 123;
final FlowBuilder flow = new FlowBuilder();
long id = TEST_ID;
String flowType = flowTypeArg;
if (flowType == null) {
flowType = "f1";
}
flow.setPriority(2);
switch(flowType) {
case "f1":
id += 1;
flow.setMatch(createMatch1().build());
flow.setInstructions(createDecNwTtlInstructions().build());
break;
case "f2":
id += 2;
flow.setMatch(createMatch2().build());
flow.setInstructions(createDropInstructions().build());
break;
case "f3":
id += 3;
flow.setMatch(createMatch3().build());
flow.setInstructions(createDropInstructions().build());
break;
case "f4":
id += 4;
flow.setMatch(createEthernetMatch().build());
flow.setInstructions(createDropInstructions().build());
break;
case "f5":
id += 5;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction().build());
break;
case "f6":
id += 6;
flow.setMatch(createMatch1().build());
flow.setInstructions(createGotoTableInstructions().build());
break;
case "f7":
id += 7;
flow.setMatch(createMatch1().build());
flow.setInstructions(createMeterInstructions().build());
break;
case "f8":
id += 8;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction1().build());
break;
case "f9":
id += 9;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction2().build());
break;
case "f10":
id += 10;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction3().build());
break;
case "f11":
id += 11;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction4().build());
break;
case "f12":
id += 12;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction5().build());
break;
case "f13":
id += 13;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction6().build());
break;
case "f14":
id += 14;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction7().build());
break;
case "f15":
id += 15;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction8().build());
break;
case "f16":
id += 16;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction9().build());
break;
case "f17":
id += 17;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction10().build());
break;
case "f18":
id += 18;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction11().build());
break;
case "f19":
id += 19;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction12().build());
break;
case "f20":
id += 20;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction13().build());
break;
case "f21":
id += 21;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction14().build());
break;
case "f22":
id += 22;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction15().build());
break;
case "f23":
id += 23;
// f23 can be used as test-case for generating error notification
// if the particular group is not configured - tested
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction16().build());
break;
case "f24":
id += 24;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction17().build());
break;
case "f25":
id += 25;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction18().build());
break;
case "f26":
id += 26;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction19().build());
break;
case "f27":
id += 27;
flow.setMatch(createMatch1().build());
flow.setInstructions(createMetadataInstructions().build());
break;
case "f28":
id += 28;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction20().build());
break;
case "f29":
id += 29;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction21().build());
break;
case "f30":
id += 30;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction22().build());
break;
case "f31":
id += 31;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction23(nodeBuilder.getId()).build());
break;
case "f32":
id += 32;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction24().build());
break;
case "f33":
id += 33;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction25().build());
break;
case "f34":
id += 34;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction26().build());
break;
case "f35":
id += 35;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction27().build());
break;
case "f36":
id += 36;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction28().build());
break;
case "f37":
id += 37;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction29().build());
break;
case "f38":
id += 38;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction30().build());
break;
case "f39":
id += 39;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction31().build());
break;
case "f40":
id += 40;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction32().build());
break;
case "f41":
id += 41;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction33().build());
break;
case "f42":
id += 42;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction34().build());
break;
case "f43":
id += 43;
flow.setMatch(createICMPv6Match().build());
flow.setInstructions(createDecNwTtlInstructions().build());
break;
case "f44":
id += 44;
flow.setMatch(createInphyportMatch(nodeBuilder.getId()).build());
flow.setInstructions(createDropInstructions().build());
break;
case "f45":
id += 45;
flow.setMatch(createMetadataMatch().build());
flow.setInstructions(createDropInstructions().build());
break;
case "f46":
id += 46;
flow.setMatch(createL3IPv6Match().build());
flow.setInstructions(createDecNwTtlInstructions().build());
break;
case "f47":
id += 47;
flow.setMatch(createL4SCTPMatch().build());
flow.setInstructions(createAppyActionInstruction().build());
break;
case "f48":
id += 48;
flow.setMatch(createTunnelIDMatch().build());
flow.setInstructions(createGotoTableInstructions().build());
break;
case "f49":
id += 49;
flow.setMatch(createVlanMatch().build());
flow.setInstructions(createMeterInstructions().build());
break;
case "f50":
id += 50;
flow.setMatch(createPbbMatch().build());
flow.setInstructions(createMeterInstructions().build());
break;
case "f51":
id += 51;
flow.setMatch(createVlanMatch().build());
flow.setInstructions(createDropInstructions().build());
break;
case "f52":
id += 52;
flow.setMatch(createL4TCPMatch().build());
flow.setInstructions(createDropInstructions().build());
break;
case "f53":
id += 53;
flow.setMatch(createL4UDPMatch().build());
flow.setInstructions(createDropInstructions().build());
break;
case "f54":
id += 54;
flow.setMatch(new MatchBuilder().build());
flow.setInstructions(createSentToControllerInstructions().build());
flow.setPriority(0);
break;
case "f55":
id += 55;
flow.setMatch(createToSMatch().build());
flow.setInstructions(createDropInstructions().build());
break;
case "f56":
id += 56;
flow.setMatch(createToSMatch().build());
flow.setInstructions(createOutputInstructions("INPORT", 10).build());
break;
case "f57":
id += 57;
flow.setMatch(createToSMatch().build());
flow.setInstructions(createOutputInstructions("FLOOD", 20).build());
break;
case "f58":
id += 58;
flow.setMatch(createToSMatch().build());
flow.setInstructions(createOutputInstructions("ALL", 30).build());
break;
case "f59":
id += 59;
flow.setMatch(createToSMatch().build());
flow.setInstructions(createOutputInstructions("NORMAL", 40).build());
break;
case "f60":
id += 60;
flow.setMatch(createToSMatch().build());
flow.setInstructions(createOutputInstructions("LOCAL", 50).build());
break;
case "f61":
id += 61;
flow.setMatch(createToSMatch().build());
flow.setInstructions(createOutputInstructions("TABLE", 60).build());
break;
case "f62":
id += 62;
flow.setMatch(createToSMatch().build());
flow.setInstructions(createOutputInstructions("NONE", 70).build());
break;
case "f63":
id += 63;
flow.setMatch(createToSMatch().build());
flow.setInstructions(createStripVlanInstructions().build());
flow.setBarrier(Boolean.TRUE);
break;
case "f64":
id += 64;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction35().build());
break;
case "f65":
id += 65;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction36().build());
break;
case "f66":
id += 66;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction37().build());
break;
case "f67":
id += 67;
flow.setMatch(createMatch1().build());
flow.setInstructions(createAppyActionInstruction38().build());
break;
case "f68":
id += 68;
flow.setMatch(createL4TCPMatch().build());
flow.setInstructions(createAppyActionInstruction39().build());
break;
case "f69":
id += 69;
flow.setMatch(createL4UDPMatch().build());
flow.setInstructions(createAppyActionInstruction40().build());
break;
case "f70":
id += 70;
flow.setMatch(createL4SCTPMatch().build());
flow.setInstructions(createAppyActionInstruction41().build());
break;
case "f71":
id += 71;
flow.setMatch(createICMPv4Match().build());
flow.setInstructions(createAppyActionInstruction42().build());
break;
case "f72":
id += 72;
flow.setMatch(createArpMatch().build());
flow.setInstructions(createAppyActionInstruction43().build());
break;
case "f73":
id += 73;
flow.setMatch(createL3IPv6Match().build());
flow.setInstructions(createAppyActionInstruction44().build());
break;
case "f74":
id += 74;
flow.setMatch(createICMPv6Match().build());
flow.setInstructions(createAppyActionInstruction45().build());
break;
case "f75":
id += 75;
flow.setMatch(createMplsMatch().build());
flow.setInstructions(createAppyActionInstruction46().build());
break;
case "f76":
id += 76;
flow.setMatch(createPbbMatch().build());
flow.setInstructions(createAppyActionInstruction47().build());
break;
case "f77":
id += 77;
flow.setMatch(createTunnelIDMatch().build());
flow.setInstructions(createAppyActionInstruction48().build());
break;
case "f78":
id += 78;
flow.setMatch(createMatch33().build());
flow.setInstructions(createDropInstructions().build());
break;
case "f79":
id += 79;
flow.setMatch(createICMPv6Match1().build());
flow.setInstructions(createDecNwTtlInstructions().build());
break;
case "f80":
id += 80;
flow.setMatch(createVlanMatch().build());
flow.setInstructions(createAppyActionInstruction88().build());
break;
case "f81":
id += 81;
flow.setMatch(createLLDPMatch().build());
flow.setInstructions(createSentToControllerInstructions().build());
break;
case "f82":
id += 82;
flow.setMatch(createToSMatch().build());
flow.setInstructions(createOutputInstructions().build());
break;
case "f83":
// Test TCP_Flag Match
id += 83;
flow.setMatch(createTcpFlagMatch().build());
flow.setInstructions(createDropInstructions().build());
break;
case "f84":
id += 84;
// match vlan=10,dl_vlan_pcp=3
flow.setMatch(createVlanMatch().build());
// vlan_pcp=4
flow.setInstructions(createAppyActionInstruction88().build());
break;
case "f85":
// Test Tunnel IPv4 Src (e.g. set_field:172.16.100.200->tun_src)
id += 85;
flow.setMatch(createMatch3().build());
flow.setInstructions(createTunnelIpv4SrcInstructions().build());
break;
case "f86":
// Test Tunnel IPv4 Dst (e.g. set_field:172.16.100.100->tun_dst)
id += 86;
flow.setMatch(createMatch1().build());
flow.setInstructions(createTunnelIpv4DstInstructions().build());
break;
default:
LOG.warn("flow type not understood: {}", flowType);
}
final FlowKey key = new FlowKey(new FlowId(Long.toString(id)));
if (null == flow.isBarrier()) {
flow.setBarrier(Boolean.FALSE);
}
final BigInteger value = BigInteger.valueOf(10);
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.setId(new FlowId("12"));
flow.setTableId(getTableId(tableId));
flow.setKey(key);
flow.setFlowName(ORIGINAL_FLOW_NAME + "X" + flowType);
return flow;
}
use of org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie in project openflowplugin by opendaylight.
the class Test method testFlow.
@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(// File under nodes
Nodes.class).child(Node.class, new NodeKey(new NodeId("openflow:1"))).build();
flow.setNode(new NodeRef(flowInstanceId));
pushFlowViaRpc(flow.build());
return Futures.immediateFuture(RpcResultBuilder.<Void>status(true).build());
}
use of org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie in project openflowplugin by opendaylight.
the class PacketInMessageDeserializer method deserialize.
@Override
public PacketInMessage deserialize(final ByteBuf message) {
final PacketInMessageBuilder packetInMessageBuilder = new PacketInMessageBuilder().setVersion((short) EncodeConstants.OF13_VERSION_ID).setXid(message.readUnsignedInt());
// We are ignoring buffer id and total len as it is not specified in OpenFlowPlugin models
message.readUnsignedInt();
message.readUnsignedShort();
packetInMessageBuilder.setPacketInReason(PacketInUtil.getMdSalPacketInReason(PacketInReason.forValue(message.readUnsignedByte()))).setTableId(new TableId(message.readUnsignedByte()));
final byte[] cookie = new byte[EncodeConstants.SIZE_OF_LONG_IN_BYTES];
message.readBytes(cookie);
packetInMessageBuilder.setFlowCookie(new FlowCookie(new BigInteger(1, cookie)));
final OFDeserializer<Match> matchDeserializer = Preconditions.checkNotNull(registry).getDeserializer(MATCH_KEY);
packetInMessageBuilder.setMatch(MatchUtil.transformMatch(matchDeserializer.deserialize(message), org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.packet.in.message.Match.class));
message.skipBytes(PADDING_IN_PACKET_IN_HEADER);
final byte[] data = new byte[message.readableBytes()];
message.readBytes(data);
return packetInMessageBuilder.setPayload(data).build();
}
use of org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie in project openflowplugin by opendaylight.
the class FlowCreatorUtil method canModifyFlow.
/**
* Determine whether a flow entry can be modified or not.
*
* @param original An original flow entry.
* @param updated An updated flow entry.
* @param version Protocol version.
* @return {@code true} only if a flow entry can be modified.
*/
public static boolean canModifyFlow(OriginalFlow original, UpdatedFlow updated, Short version) {
// flags, and cookie.
if (!Objects.equals(original.getMatch(), updated.getMatch()) || !equalsWithDefault(original.getPriority(), updated.getPriority(), FlowConvertor.DEFAULT_PRIORITY) || !equalsWithDefault(original.getIdleTimeout(), updated.getIdleTimeout(), FlowConvertor.DEFAULT_IDLE_TIMEOUT) || !equalsWithDefault(original.getHardTimeout(), updated.getHardTimeout(), FlowConvertor.DEFAULT_HARD_TIMEOUT) || !equalsFlowModFlags(original.getFlags(), updated.getFlags())) {
return false;
}
if (!Boolean.TRUE.equals(updated.isStrict()) && version != null && version.shortValue() != OFConstants.OFP_VERSION_1_0) {
FlowCookie cookieMask = updated.getCookieMask();
if (cookieMask != null) {
BigInteger mask = cookieMask.getValue();
if (mask != null && !mask.equals(BigInteger.ZERO)) {
// Allow FLOW_MOD with filtering by cookie.
return true;
}
}
}
FlowCookie oc = original.getCookie();
FlowCookie uc = updated.getCookie();
BigInteger orgCookie;
BigInteger updCookie;
if (oc == null) {
if (uc == null) {
return true;
}
orgCookie = OFConstants.DEFAULT_COOKIE;
updCookie = uc.getValue();
} else {
orgCookie = oc.getValue();
updCookie = (uc == null) ? OFConstants.DEFAULT_COOKIE : uc.getValue();
}
return equalsWithDefault(orgCookie, updCookie, OFConstants.DEFAULT_COOKIE);
}
use of org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie in project openflowplugin by opendaylight.
the class FlowRegistryKeyFactoryTest method testGetHashNPE.
@Test
public void testGetHashNPE() throws Exception {
MatchBuilder match1Builder = new MatchBuilder().setLayer3Match(new Ipv4MatchBuilder().setIpv4Destination(new Ipv4Prefix("10.0.1.157/32")).build());
FlowBuilder flow1Builder = new FlowBuilder().setCookie(new FlowCookie(BigInteger.valueOf(483))).setMatch(match1Builder.build()).setPriority(2).setTableId((short) 0);
FlowBuilder fb1 = new FlowBuilder(flow1Builder.build());
fb1.setTableId(null);
try {
FlowRegistryKeyFactory.create(deviceInfo.getVersion(), fb1.build());
Assert.fail("hash creation should have failed because of NPE");
} catch (NullPointerException e) {
// expected
Assert.assertEquals("flow tableId must not be null", e.getMessage());
}
FlowBuilder fb2 = new FlowBuilder(flow1Builder.build());
fb2.setPriority(null);
try {
FlowRegistryKeyFactory.create(deviceInfo.getVersion(), fb2.build());
} catch (NullPointerException e) {
// not expected
Assert.fail("no exception was expected while hash was creating.");
}
FlowBuilder fb3 = new FlowBuilder(flow1Builder.build());
fb3.setCookie(null);
FlowRegistryKey flowRegistryKey = FlowRegistryKeyFactory.create(deviceInfo.getVersion(), fb3.build());
Assert.assertNotNull(flowRegistryKey.getCookie());
Assert.assertEquals(OFConstants.DEFAULT_COOKIE, flowRegistryKey.getCookie());
}
Aggregations