Search in sources :

Example 1 with NxActionCtMarkCase

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
            }
        }
    }
}
Also used : NxActionCtMark(org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofpact.actions.ofpact.actions.nx.action.ct.mark._case.NxActionCtMark) NxActionCtMarkCase(org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofpact.actions.ofpact.actions.NxActionCtMarkCase) NxActionNatCase(org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofpact.actions.ofpact.actions.NxActionNatCase) CtActions(org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofj.nx.action.conntrack.grouping.nx.action.conntrack.CtActions) NxActionNat(org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofpact.actions.ofpact.actions.nx.action.nat._case.NxActionNat)

Example 2 with NxActionCtMarkCase

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;
}
Also used : NxActionCtMarkCase(org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofpact.actions.ofpact.actions.NxActionCtMarkCase) NxActionNatCase(org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofpact.actions.ofpact.actions.NxActionNatCase) CtActions(org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofj.nx.action.conntrack.grouping.nx.action.conntrack.CtActions) NxActionNat(org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofpact.actions.ofpact.actions.nx.action.nat._case.NxActionNat)

Example 3 with NxActionCtMarkCase

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());
}
Also used : NxActionCtMark(org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofpact.actions.ofpact.actions.nx.action.ct.mark._case.NxActionCtMark) NxActionCtMarkCase(org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofpact.actions.ofpact.actions.NxActionCtMarkCase) NxActionNatCase(org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofpact.actions.ofpact.actions.NxActionNatCase) CtActions(org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofj.nx.action.conntrack.grouping.nx.action.conntrack.CtActions) ActionConntrack(org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionConntrack) NxActionNat(org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofpact.actions.ofpact.actions.nx.action.nat._case.NxActionNat) Test(org.junit.Test)

Example 4 with NxActionCtMarkCase

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;
}
Also used : NxActionCtMarkCaseBuilder(org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.ofpact.actions.ofpact.actions.NxActionCtMarkCaseBuilder) CtActions(org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.conntrack.grouping.nx.conntrack.CtActions) ArrayList(java.util.ArrayList) NxActionNatBuilder(org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.ofpact.actions.ofpact.actions.nx.action.nat._case.NxActionNatBuilder) CtActionsBuilder(org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.conntrack.grouping.nx.conntrack.CtActionsBuilder) NxActionNat(org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.ofpact.actions.ofpact.actions.nx.action.nat._case.NxActionNat) NxActionCtMarkBuilder(org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.ofpact.actions.ofpact.actions.nx.action.ct.mark._case.NxActionCtMarkBuilder) NxActionCtMark(org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.ofpact.actions.ofpact.actions.nx.action.ct.mark._case.NxActionCtMark) NxActionCtMarkCase(org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.ofpact.actions.ofpact.actions.NxActionCtMarkCase) NxActionNatCase(org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.ofpact.actions.ofpact.actions.NxActionNatCase) OfpactActions(org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.ofpact.actions.OfpactActions) NxActionNatCaseBuilder(org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.ofpact.actions.ofpact.actions.NxActionNatCaseBuilder)

Aggregations

CtActions (org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofj.nx.action.conntrack.grouping.nx.action.conntrack.CtActions)3 NxActionCtMarkCase (org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofpact.actions.ofpact.actions.NxActionCtMarkCase)3 NxActionNatCase (org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofpact.actions.ofpact.actions.NxActionNatCase)3 NxActionNat (org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofpact.actions.ofpact.actions.nx.action.nat._case.NxActionNat)3 NxActionCtMark (org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofpact.actions.ofpact.actions.nx.action.ct.mark._case.NxActionCtMark)2 ArrayList (java.util.ArrayList)1 Test (org.junit.Test)1 ActionConntrack (org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionConntrack)1 CtActions (org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.conntrack.grouping.nx.conntrack.CtActions)1 CtActionsBuilder (org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.conntrack.grouping.nx.conntrack.CtActionsBuilder)1 OfpactActions (org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.ofpact.actions.OfpactActions)1 NxActionCtMarkCase (org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.ofpact.actions.ofpact.actions.NxActionCtMarkCase)1 NxActionCtMarkCaseBuilder (org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.ofpact.actions.ofpact.actions.NxActionCtMarkCaseBuilder)1 NxActionNatCase (org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.ofpact.actions.ofpact.actions.NxActionNatCase)1 NxActionNatCaseBuilder (org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.ofpact.actions.ofpact.actions.NxActionNatCaseBuilder)1 NxActionCtMark (org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.ofpact.actions.ofpact.actions.nx.action.ct.mark._case.NxActionCtMark)1 NxActionCtMarkBuilder (org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.ofpact.actions.ofpact.actions.nx.action.ct.mark._case.NxActionCtMarkBuilder)1 NxActionNat (org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.ofpact.actions.ofpact.actions.nx.action.nat._case.NxActionNat)1 NxActionNatBuilder (org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.ofpact.actions.ofpact.actions.nx.action.nat._case.NxActionNatBuilder)1