use of org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionConntrack 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.action.container.action.choice.ActionConntrack 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.action.container.action.choice.ActionConntrack 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.action.container.action.choice.ActionConntrack in project openflowplugin by opendaylight.
the class ConntrackCodecTest method deserializeTestWithoutCtAction.
@Test
public void deserializeTestWithoutCtAction() {
createBufferWIthoutCtAction(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());
}
use of org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionConntrack in project openflowplugin by opendaylight.
the class ConntrackCodec method serialize.
@Override
public void serialize(final Action input, final ByteBuf outBuffer) {
LOG.trace("serialize :conntrack");
ActionConntrack action = (ActionConntrack) input.getActionChoice();
int length = getActionLength(action);
int pad = length % 8;
serializeHeader(length + pad + CT_LENGTH, NXAST_CONNTRACK_SUBTYPE, outBuffer);
outBuffer.writeShort(action.getNxActionConntrack().getFlags().shortValue());
outBuffer.writeInt(action.getNxActionConntrack().getZoneSrc().intValue());
outBuffer.writeShort(action.getNxActionConntrack().getConntrackZone().shortValue());
outBuffer.writeByte(action.getNxActionConntrack().getRecircTable().byteValue());
outBuffer.writeZero(5);
serializeCtAction(outBuffer, action);
}
Aggregations