use of org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofpact.actions.ofpact.actions.NxActionCtMarkCase in project openflowplugin by opendaylight.
the class ConntrackCodec method serializeCtAction.
private void serializeCtAction(final ByteBuf outBuffer, final ActionConntrack action) {
List<CtActions> ctActionsList = action.getNxActionConntrack().getCtActions();
if (ctActionsList != null) {
for (CtActions ctActions : ctActionsList) {
if (ctActions.getOfpactActions() instanceof NxActionNatCase) {
NxActionNatCase nxActionNatCase = (NxActionNatCase) ctActions.getOfpactActions();
NxActionNat natAction = nxActionNatCase.getNxActionNat();
int natLength = getNatActionLength(natAction);
int pad = 8 - natLength % 8;
serializeHeader(natLength + pad, NXAST_NAT_SUBTYPE, outBuffer);
outBuffer.writeZero(2);
outBuffer.writeShort(natAction.getFlags().shortValue());
short rangePresent = natAction.getRangePresent().shortValue();
outBuffer.writeShort(rangePresent);
if (0 != (rangePresent & NxActionNatRangePresent.NXNATRANGEIPV4MIN.getIntValue())) {
if (null != natAction.getIpAddressMin()) {
outBuffer.writeBytes(IetfInetUtil.INSTANCE.ipv4AddressBytes(natAction.getIpAddressMin().getIpv4Address()));
}
}
if (0 != (rangePresent & NxActionNatRangePresent.NXNATRANGEIPV4MAX.getIntValue())) {
if (null != natAction.getIpAddressMax()) {
outBuffer.writeBytes(IetfInetUtil.INSTANCE.ipv4AddressBytes(natAction.getIpAddressMax().getIpv4Address()));
}
}
if (0 != (rangePresent & NxActionNatRangePresent.NXNATRANGEPROTOMIN.getIntValue())) {
outBuffer.writeShort(natAction.getPortMin());
}
if (0 != (rangePresent & NxActionNatRangePresent.NXNATRANGEPROTOMAX.getIntValue())) {
outBuffer.writeShort(natAction.getPortMax());
}
outBuffer.writeZero(pad);
} else if (ctActions.getOfpactActions() instanceof NxActionCtMarkCase) {
NxActionCtMarkCase nxActionCtMarkCase = (NxActionCtMarkCase) ctActions.getOfpactActions();
NxActionCtMark ctMarkAction = nxActionCtMarkCase.getNxActionCtMark();
// structure:
// 00 19 - set field code
// 00 10 - set field length
// 00 01 d6 04
// xx xx xx xx FIELD VALUE (4 bytes)
// xx xx xx xx PADDING (4 bytes)
outBuffer.writeShort(SET_FIELD_CODE);
outBuffer.writeShort(SET_FIELD_LENGTH);
outBuffer.writeZero(1);
outBuffer.writeByte(NXM_FIELD_CODE);
outBuffer.writeByte(NXM_CT_MARK_FIELD_CODE << 1);
outBuffer.writeByte(INT_LENGTH);
outBuffer.writeInt(ctMarkAction.getCtMark().intValue());
outBuffer.writeZero(INT_LENGTH);
// TODO: ct_mark mask is not supported yet
}
}
}
}
use of org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofpact.actions.ofpact.actions.NxActionCtMarkCase in project openflowplugin by opendaylight.
the class ConntrackCodec method getActionLength.
private int getActionLength(final ActionConntrack action) {
int length = 0;
List<CtActions> ctActionsList = action.getNxActionConntrack().getCtActions();
if (ctActionsList == null) {
return length;
}
for (CtActions ctActions : ctActionsList) {
if (ctActions.getOfpactActions() instanceof NxActionNatCase) {
NxActionNatCase nxActionNatCase = (NxActionNatCase) ctActions.getOfpactActions();
NxActionNat natAction = nxActionNatCase.getNxActionNat();
int natLength = getNatActionLength(natAction);
int pad = 8 - natLength % 8;
length += natLength + pad;
} else if (ctActions.getOfpactActions() instanceof NxActionCtMarkCase) {
length += SET_FIELD_LENGTH;
}
}
LOG.trace("ActionLength :conntrack: length {}", length);
return length;
}
use of org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofpact.actions.ofpact.actions.NxActionCtMarkCase in project openflowplugin by opendaylight.
the class ConntrackCodecTest method deserializeTest.
@Test
public void deserializeTest() {
createBuffer(buffer);
action = conntrackCodec.deserialize(buffer);
ActionConntrack result = (ActionConntrack) action.getActionChoice();
Assert.assertEquals(1, result.getNxActionConntrack().getFlags().shortValue());
Assert.assertEquals(2, result.getNxActionConntrack().getZoneSrc().intValue());
Assert.assertEquals(3, result.getNxActionConntrack().getConntrackZone().shortValue());
Assert.assertEquals(4, result.getNxActionConntrack().getRecircTable().byteValue());
List<CtActions> ctActions = result.getNxActionConntrack().getCtActions();
NxActionNatCase nxActionNatCase = (NxActionNatCase) ctActions.get(0).getOfpactActions();
NxActionNat natAction = nxActionNatCase.getNxActionNat();
Assert.assertEquals(5, natAction.getFlags().shortValue());
Assert.assertEquals(0x3F, natAction.getRangePresent().intValue());
Assert.assertEquals("192.168.0.0", natAction.getIpAddressMin().getIpv4Address().getValue());
Assert.assertEquals("192.168.10.0", natAction.getIpAddressMax().getIpv4Address().getValue());
Assert.assertEquals(3000, natAction.getPortMin().shortValue());
Assert.assertEquals(4000, natAction.getPortMax().shortValue());
nxActionNatCase = (NxActionNatCase) ctActions.get(1).getOfpactActions();
natAction = nxActionNatCase.getNxActionNat();
Assert.assertEquals(5, natAction.getFlags().shortValue());
Assert.assertEquals(0x21, natAction.getRangePresent().intValue());
Assert.assertEquals("192.168.0.0", natAction.getIpAddressMin().getIpv4Address().getValue());
Assert.assertEquals(4000, natAction.getPortMax().shortValue());
NxActionCtMarkCase nxActionCtMarkCase = (NxActionCtMarkCase) ctActions.get(2).getOfpactActions();
NxActionCtMark ctMarkAction = nxActionCtMarkCase.getNxActionCtMark();
Assert.assertEquals(36, ctMarkAction.getCtMark().longValue());
}
use of org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofpact.actions.ofpact.actions.NxActionCtMarkCase in project openflowplugin by opendaylight.
the class ConntrackConvertor method getCtAction.
private List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofj.nx.action.conntrack.grouping.nx.action.conntrack.CtActions> getCtAction(final NxConntrack action) {
if (action.getCtActions() == null) {
return null;
}
List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofj.nx.action.conntrack.grouping.nx.action.conntrack.CtActions> ctActions = new ArrayList<>();
for (CtActions ctAction : action.getCtActions()) {
OfpactActions ofpactAction = ctAction.getOfpactActions();
if (ofpactAction instanceof NxActionNatCase) {
NxActionNat nxActionNat = ((NxActionNatCase) ofpactAction).getNxActionNat();
org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofpact.actions.ofpact.actions.nx.action.nat._case.NxActionNatBuilder nxActionNatBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofpact.actions.ofpact.actions.nx.action.nat._case.NxActionNatBuilder();
nxActionNatBuilder.setFlags(nxActionNat.getFlags());
nxActionNatBuilder.setRangePresent(nxActionNat.getRangePresent());
nxActionNatBuilder.setIpAddressMin(nxActionNat.getIpAddressMin());
nxActionNatBuilder.setIpAddressMax(nxActionNat.getIpAddressMax());
nxActionNatBuilder.setPortMin(nxActionNat.getPortMin());
nxActionNatBuilder.setPortMax(nxActionNat.getPortMax());
org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofpact.actions.ofpact.actions.NxActionNatCaseBuilder caseBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofpact.actions.ofpact.actions.NxActionNatCaseBuilder();
caseBuilder.setNxActionNat(nxActionNatBuilder.build());
org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofj.nx.action.conntrack.grouping.nx.action.conntrack.CtActionsBuilder ctActionsBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofj.nx.action.conntrack.grouping.nx.action.conntrack.CtActionsBuilder();
ctActionsBuilder.setOfpactActions(caseBuilder.build());
ctActions.add(ctActionsBuilder.build());
} else if (ofpactAction instanceof NxActionCtMarkCase) {
NxActionCtMark nxActionCtMark = ((NxActionCtMarkCase) ofpactAction).getNxActionCtMark();
org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofpact.actions.ofpact.actions.nx.action.ct.mark._case.NxActionCtMarkBuilder nxActionCtMarkBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofpact.actions.ofpact.actions.nx.action.ct.mark._case.NxActionCtMarkBuilder();
nxActionCtMarkBuilder.setCtMark(nxActionCtMark.getCtMark());
// TODO: ct_mark mask is not supported yet
org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofpact.actions.ofpact.actions.NxActionCtMarkCaseBuilder caseBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofpact.actions.ofpact.actions.NxActionCtMarkCaseBuilder();
caseBuilder.setNxActionCtMark(nxActionCtMarkBuilder.build());
org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofj.nx.action.conntrack.grouping.nx.action.conntrack.CtActionsBuilder ctActionsBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofj.nx.action.conntrack.grouping.nx.action.conntrack.CtActionsBuilder();
ctActionsBuilder.setOfpactActions(caseBuilder.build());
ctActions.add(ctActionsBuilder.build());
}
}
return ctActions;
}
Aggregations