use of org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ipv6.match.fields.Ipv6ExtHeaderBuilder in project openflowplugin by opendaylight.
the class Ipv6ExtHeaderEntryDeserializer method deserializeEntry.
@Override
public void deserializeEntry(ByteBuf message, MatchBuilder builder) {
final boolean hasMask = processHeader(message);
final Ipv6ExtHeaderBuilder extHeaderBuilder = new Ipv6ExtHeaderBuilder().setIpv6Exthdr(message.readUnsignedShort());
if (hasMask) {
final byte[] mask = OxmDeserializerHelper.convertMask(message, EncodeConstants.SIZE_OF_SHORT_IN_BYTES);
extHeaderBuilder.setIpv6ExthdrMask(ByteUtil.bytesToUnsignedShort(mask));
}
if (Objects.isNull(builder.getLayer3Match())) {
builder.setLayer3Match(new Ipv6MatchBuilder().setIpv6ExtHeader(extHeaderBuilder.build()).build());
} else if (Ipv6Match.class.isInstance(builder.getLayer3Match()) && Objects.isNull(Ipv6Match.class.cast(builder.getLayer3Match()).getIpv6ExtHeader())) {
final Ipv6Match match = Ipv6Match.class.cast(builder.getLayer3Match());
builder.setLayer3Match(new Ipv6MatchBuilder(match).setIpv6ExtHeader(extHeaderBuilder.build()).build());
} else {
throwErrorOnMalformed(builder, "layer3Match", "ipv6ExtHeader");
}
}
use of org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ipv6.match.fields.Ipv6ExtHeaderBuilder in project openflowplugin by opendaylight.
the class Ipv6ExtHeaderEntrySerializerTest method testSerialize.
@Test
public void testSerialize() throws Exception {
final int ipv6extHdr = 358;
final int ipv6extHdrMask = 100;
final Match ipv6extHdrMatch = new MatchBuilder().setLayer3Match(new Ipv6MatchBuilder().setIpv6ExtHeader(new Ipv6ExtHeaderBuilder().setIpv6Exthdr(ipv6extHdr).setIpv6ExthdrMask(ipv6extHdrMask).build()).build()).build();
assertMatch(ipv6extHdrMatch, true, (out) -> {
assertEquals(out.readUnsignedShort(), ipv6extHdr);
byte[] mask = new byte[2];
out.readBytes(mask);
assertArrayEquals(mask, ByteUtil.unsignedShortToBytes(ipv6extHdrMask));
});
final Match ipv6exyHdrMatchNoMask = new MatchBuilder().setLayer3Match(new Ipv6MatchBuilder().setIpv6ExtHeader(new Ipv6ExtHeaderBuilder().setIpv6Exthdr(ipv6extHdr).build()).build()).build();
assertMatch(ipv6exyHdrMatchNoMask, false, (out) -> assertEquals(out.readUnsignedShort(), ipv6extHdr));
}
use of org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ipv6.match.fields.Ipv6ExtHeaderBuilder in project openflowplugin by opendaylight.
the class MatchConvertorTest method testIpv6ExtHeaderConversion.
@Test
public void testIpv6ExtHeaderConversion() {
Ipv6MatchBuilder ipv6Builder = new Ipv6MatchBuilder();
Ipv6ExtHeaderBuilder extHdrBuilder = new Ipv6ExtHeaderBuilder();
extHdrBuilder.setIpv6Exthdr(358);
extHdrBuilder.setIpv6ExthdrMask(258);
ipv6Builder.setIpv6ExtHeader(extHdrBuilder.build());
MatchBuilder builder = new MatchBuilder();
builder.setLayer3Match(ipv6Builder.build());
Match match = builder.build();
Optional<List<MatchEntry>> entriesOptional = converterManager.convert(match, new VersionConvertorData(OFConstants.OFP_VERSION_1_3));
List<MatchEntry> entries = entriesOptional.get();
Assert.assertEquals("Wrong entries size", 1, entries.size());
MatchEntry entry = entries.get(0);
checkEntryHeader(entry, Ipv6Exthdr.class, true);
Assert.assertEquals("Wrong ipv6 ext hdr", new Ipv6ExthdrFlags(true, false, true, false, true, false, true, false, true), ((Ipv6ExthdrCase) entry.getMatchEntryValue()).getIpv6Exthdr().getPseudoField());
Assert.assertArrayEquals("Wrong ipv6 ext hdr mask", new byte[] { 1, 2 }, ((Ipv6ExthdrCase) entry.getMatchEntryValue()).getIpv6Exthdr().getMask());
}
use of org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ipv6.match.fields.Ipv6ExtHeaderBuilder in project openflowplugin by opendaylight.
the class MatchConvertorTest method testIpv6MatchConversion.
@Test
public void testIpv6MatchConversion() {
Ipv6MatchBuilder ipv6Builder = new Ipv6MatchBuilder();
ipv6Builder.setIpv6Source(new Ipv6Prefix("::1/128"));
ipv6Builder.setIpv6Destination(new Ipv6Prefix("::2/128"));
Ipv6LabelBuilder ipv6LabelBuilder = new Ipv6LabelBuilder();
ipv6LabelBuilder.setIpv6Flabel(new Ipv6FlowLabel(3L));
ipv6Builder.setIpv6Label(ipv6LabelBuilder.build());
ipv6Builder.setIpv6NdTarget(new Ipv6Address("::4"));
ipv6Builder.setIpv6NdSll(new MacAddress("00:00:00:00:00:05"));
ipv6Builder.setIpv6NdTll(new MacAddress("00:00:00:00:00:06"));
Ipv6ExtHeaderBuilder extHdrBuilder = new Ipv6ExtHeaderBuilder();
extHdrBuilder.setIpv6Exthdr(153);
ipv6Builder.setIpv6ExtHeader(extHdrBuilder.build());
MatchBuilder builder = new MatchBuilder();
builder.setLayer3Match(ipv6Builder.build());
Match match = builder.build();
Optional<List<MatchEntry>> entriesOptional = converterManager.convert(match, new VersionConvertorData(OFConstants.OFP_VERSION_1_3));
List<MatchEntry> entries = entriesOptional.get();
Assert.assertEquals("Wrong entries size", 7, entries.size());
MatchEntry entry = entries.get(0);
/* Due to conversion ambiguities, we always get "has mask" because
* an ip with no mask and prefix with /128 (or 32 in v4) cannot
* be distinguished */
checkEntryHeader(entry, Ipv6Src.class, true);
Assert.assertEquals("Wrong ipv6 src", "::1", ((Ipv6SrcCase) entry.getMatchEntryValue()).getIpv6Src().getIpv6Address().getValue());
entry = entries.get(1);
checkEntryHeader(entry, Ipv6Dst.class, true);
Assert.assertEquals("Wrong ipv6 dst", "::2", ((Ipv6DstCase) entry.getMatchEntryValue()).getIpv6Dst().getIpv6Address().getValue());
entry = entries.get(2);
checkEntryHeader(entry, Ipv6Flabel.class, false);
Assert.assertEquals("Wrong ipv6 flabel", 3, ((Ipv6FlabelCase) entry.getMatchEntryValue()).getIpv6Flabel().getIpv6Flabel().getValue().intValue());
entry = entries.get(3);
checkEntryHeader(entry, Ipv6NdTarget.class, false);
Assert.assertEquals("Wrong ipv6 nd target", "::4", ((Ipv6NdTargetCase) entry.getMatchEntryValue()).getIpv6NdTarget().getIpv6Address().getValue());
entry = entries.get(4);
checkEntryHeader(entry, Ipv6NdSll.class, false);
Assert.assertEquals("Wrong ipv6 nd sll", "00:00:00:00:00:05", ((Ipv6NdSllCase) entry.getMatchEntryValue()).getIpv6NdSll().getMacAddress().getValue());
entry = entries.get(5);
checkEntryHeader(entry, Ipv6NdTll.class, false);
Assert.assertEquals("Wrong ipv6 nd tll", "00:00:00:00:00:06", ((Ipv6NdTllCase) entry.getMatchEntryValue()).getIpv6NdTll().getMacAddress().getValue());
entry = entries.get(6);
checkEntryHeader(entry, Ipv6Exthdr.class, false);
Assert.assertEquals("Wrong ipv6 ext hdr", new Ipv6ExthdrFlags(false, true, false, true, false, true, false, true, false), ((Ipv6ExthdrCase) entry.getMatchEntryValue()).getIpv6Exthdr().getPseudoField());
}
use of org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ipv6.match.fields.Ipv6ExtHeaderBuilder in project openflowplugin by opendaylight.
the class OpenflowpluginTestCommandProvider method createAppyActionInstruction44.
private static InstructionsBuilder createAppyActionInstruction44() {
final List<Action> actionLists = new ArrayList<>();
final ActionBuilder ab = new ActionBuilder();
final SetFieldBuilder setFieldBuilder = new SetFieldBuilder();
final ActionBuilder ab1 = new ActionBuilder();
final SetFieldBuilder setFieldBuilder1 = new SetFieldBuilder();
final ActionBuilder ab5 = new ActionBuilder();
final SetFieldBuilder setFieldBuilder5 = new SetFieldBuilder();
final ActionBuilder ab6 = new ActionBuilder();
final SetFieldBuilder setFieldBuilder6 = new SetFieldBuilder();
// IPv6
final Ipv6MatchBuilder ipv6Builder = new Ipv6MatchBuilder();
final Ipv6MatchBuilder ipv6Builder1 = new Ipv6MatchBuilder();
final Ipv6MatchBuilder ipv6Builder5 = new Ipv6MatchBuilder();
final Ipv6MatchBuilder ipv6Builder6 = new Ipv6MatchBuilder();
final Ipv6Prefix dstip6 = new Ipv6Prefix("2002::2/128");
final Ipv6Prefix srcip6 = new Ipv6Prefix("2001:0:0:0:0:0:0:1/128");
final Ipv6ExtHeaderBuilder nextheader = new Ipv6ExtHeaderBuilder();
nextheader.setIpv6Exthdr(58);
final Ipv6LabelBuilder ipv6label = new Ipv6LabelBuilder();
final Ipv6FlowLabel label = new Ipv6FlowLabel(10028L);
ipv6label.setIpv6Flabel(label);
ipv6Builder.setIpv6Source(srcip6);
ipv6Builder1.setIpv6Destination(dstip6);
ipv6Builder5.setIpv6ExtHeader(nextheader.build());
ipv6Builder6.setIpv6Label(ipv6label.build());
setFieldBuilder.setLayer3Match(ipv6Builder.build());
ab.setAction(new SetFieldCaseBuilder().setSetField(setFieldBuilder.build()).build());
ab.setKey(new ActionKey(0));
actionLists.add(ab.build());
setFieldBuilder1.setLayer3Match(ipv6Builder1.build());
ab1.setAction(new SetFieldCaseBuilder().setSetField(setFieldBuilder1.build()).build());
ab1.setKey(new ActionKey(1));
actionLists.add(ab1.build());
setFieldBuilder5.setLayer3Match(ipv6Builder5.build());
ab5.setAction(new SetFieldCaseBuilder().setSetField(setFieldBuilder5.build()).build());
ab5.setKey(new ActionKey(5));
actionLists.add(ab5.build());
setFieldBuilder6.setLayer3Match(ipv6Builder6.build());
ab6.setAction(new SetFieldCaseBuilder().setSetField(setFieldBuilder6.build()).build());
ab6.setKey(new ActionKey(6));
actionLists.add(ab6.build());
final ApplyActionsBuilder aab = new ApplyActionsBuilder();
aab.setAction(actionLists);
final InstructionBuilder ib = new InstructionBuilder();
ib.setKey(new InstructionKey(0));
ib.setInstruction(new ApplyActionsCaseBuilder().setApplyActions(aab.build()).build());
// Put our Instruction in a list of Instructions
final InstructionsBuilder isb = new InstructionsBuilder();
final List<Instruction> instructions = new ArrayList<>();
instructions.add(ib.build());
isb.setInstruction(instructions);
return isb;
}
Aggregations