Search in sources :

Example 1 with UdpMatch

use of org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatch in project netvirt by opendaylight.

the class AclMatches method addIpProtocolMatch.

private void addIpProtocolMatch(AceIp aceIp) {
    // Match on IP
    setIpv4EtherType();
    IpMatchBuilder ipMatch = new IpMatchBuilder();
    ipMatch.setIpProtocol(aceIp.getProtocol());
    matchBuilder.setIpMatch(mergeIpMatch(matchBuilder, ipMatch));
    // TODO Ranges are not supported yet
    int srcPort = 0;
    if (aceIp.getSourcePortRange() != null && aceIp.getSourcePortRange().getLowerPort() != null) {
        srcPort = aceIp.getSourcePortRange().getLowerPort().getValue();
    }
    int dstPort = 0;
    if (aceIp.getDestinationPortRange() != null && aceIp.getDestinationPortRange().getLowerPort() != null) {
        dstPort = aceIp.getDestinationPortRange().getLowerPort().getValue();
    }
    // Match on a TCP/UDP src/dst port
    if (aceIp.getProtocol() == IPProtocols.TCP.shortValue()) {
        TcpMatchBuilder tcpMatch = new TcpMatchBuilder();
        if (srcPort != 0) {
            tcpMatch.setTcpSourcePort(new PortNumber(srcPort));
        }
        if (dstPort != 0) {
            tcpMatch.setTcpDestinationPort(new PortNumber(dstPort));
        }
        if (srcPort != 0 || dstPort != 0) {
            matchBuilder.setLayer4Match(tcpMatch.build());
        }
    } else if (aceIp.getProtocol() == IPProtocols.UDP.shortValue()) {
        UdpMatchBuilder udpMatch = new UdpMatchBuilder();
        if (srcPort != 0) {
            udpMatch.setUdpSourcePort(new PortNumber(srcPort));
        }
        if (dstPort != 0) {
            udpMatch.setUdpDestinationPort(new PortNumber(dstPort));
        }
        if (srcPort != 0 || dstPort != 0) {
            matchBuilder.setLayer4Match(udpMatch.build());
        }
    }
}
Also used : IpMatchBuilder(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.IpMatchBuilder) TcpMatchBuilder(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.TcpMatchBuilder) PortNumber(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber) UdpMatchBuilder(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatchBuilder)

Example 2 with UdpMatch

use of org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatch in project netvirt by opendaylight.

the class NaptFlowRemovedEventHandler method onFlowRemoved.

@Override
public void onFlowRemoved(FlowRemoved flowRemoved) {
    /*
        If the removed flow is from the OUTBOUND NAPT table :
        1) Get the ActionInfo of the flow.
        2) From the ActionInfo of the flow get the internal IP address, port and the protocol.
        3) Get the Metadata matching info of the flow.
        4) From the Metadata matching info of the flow get router ID.
        5) Querry the container intext-ip-port-map using the router ID
           and the internal IP address, port to get the external IP address, port
        6) Instantiate an NaptEntry event and populate the external IP address, port and the router ID.
        7) Place the NaptEntry event to the queue.
*/
    short tableId = flowRemoved.getTableId();
    RemovedFlowReason removedReasonFlag = flowRemoved.getReason();
    if (tableId == NwConstants.OUTBOUND_NAPT_TABLE && RemovedFlowReason.OFPRRIDLETIMEOUT.equals(removedReasonFlag)) {
        LOG.info("onFlowRemoved : triggered for table-{} entry", tableId);
        // Get the internal internal IP address and the port number from the IPv4 match.
        Ipv4Prefix internalIpv4Address = null;
        Layer3Match layer3Match = flowRemoved.getMatch().getLayer3Match();
        if (layer3Match instanceof Ipv4Match) {
            Ipv4Match internalIpv4Match = (Ipv4Match) layer3Match;
            internalIpv4Address = internalIpv4Match.getIpv4Source();
        }
        if (internalIpv4Address == null) {
            LOG.error("onFlowRemoved : Matching internal IP is null while retrieving the " + "value from the Outbound NAPT flow");
            return;
        }
        // Get the internal IP as a string
        String internalIpv4AddressAsString = internalIpv4Address.getValue();
        String[] internalIpv4AddressParts = internalIpv4AddressAsString.split("/");
        String internalIpv4HostAddress = null;
        if (internalIpv4AddressParts.length >= 1) {
            internalIpv4HostAddress = internalIpv4AddressParts[0];
        }
        // Get the protocol from the layer4 match
        NAPTEntryEvent.Protocol protocol = null;
        Integer internalPortNumber = null;
        Layer4Match layer4Match = flowRemoved.getMatch().getLayer4Match();
        if (layer4Match instanceof TcpMatch) {
            TcpMatchFields tcpMatchFields = (TcpMatchFields) layer4Match;
            internalPortNumber = tcpMatchFields.getTcpSourcePort().getValue();
            protocol = NAPTEntryEvent.Protocol.TCP;
        } else if (layer4Match instanceof UdpMatch) {
            UdpMatchFields udpMatchFields = (UdpMatchFields) layer4Match;
            internalPortNumber = udpMatchFields.getUdpSourcePort().getValue();
            protocol = NAPTEntryEvent.Protocol.UDP;
        }
        if (protocol == null) {
            LOG.error("onFlowRemoved : Matching protocol is null while retrieving the value " + "from the Outbound NAPT flow");
            return;
        }
        // Get the router ID from the metadata.
        Long routerId;
        BigInteger metadata = flowRemoved.getMatch().getMetadata().getMetadata();
        if (MetaDataUtil.getNatRouterIdFromMetadata(metadata) != 0) {
            routerId = MetaDataUtil.getNatRouterIdFromMetadata(metadata);
        } else {
            LOG.error("onFlowRemoved : Null exception while retrieving routerId");
            return;
        }
        final String internalIpPortKey = routerId + NatConstants.COLON_SEPARATOR + internalIpv4HostAddress + NatConstants.COLON_SEPARATOR + internalPortNumber;
        // Get the external IP address and the port from the model
        IpPortExternal ipPortExternal = NatUtil.getExternalIpPortMap(dataBroker, routerId, internalIpv4HostAddress, internalPortNumber.toString(), protocol);
        if (ipPortExternal == null) {
            LOG.error("onFlowRemoved : IpPortExternal not found, BGP vpn might be " + "associated with router");
            // router must be associated with BGP vpn ID
            long bgpVpnId = routerId;
            LOG.debug("onFlowRemoved : BGP VPN ID {}", bgpVpnId);
            String vpnName = NatUtil.getRouterName(dataBroker, bgpVpnId);
            String routerName = NatUtil.getRouterIdfromVpnInstance(dataBroker, vpnName);
            if (routerName == null) {
                LOG.error("onFlowRemoved : Unable to find router for VpnName {}", vpnName);
                return;
            }
            routerId = NatUtil.getVpnId(dataBroker, routerName);
            LOG.debug("onFlowRemoved : Router ID {}", routerId);
            ipPortExternal = NatUtil.getExternalIpPortMap(dataBroker, routerId, internalIpv4HostAddress, internalPortNumber.toString(), protocol);
            if (ipPortExternal == null) {
                LOG.error("onFlowRemoved : IpPortExternal is null while queried from the " + "model for routerId {}", routerId);
                return;
            }
        }
        String externalIpAddress = ipPortExternal.getIpAddress();
        int externalPortNumber = ipPortExternal.getPortNum();
        // Create an NAPT event and place it in the queue.
        NAPTEntryEvent naptEntryEvent = new NAPTEntryEvent(externalIpAddress, externalPortNumber, routerId, NAPTEntryEvent.Operation.DELETE, protocol, null, false, null);
        naptEventdispatcher.addFlowRemovedNaptEvent(naptEntryEvent);
        // Get the DPN ID from the Node
        InstanceIdentifier<Node> nodeRef = flowRemoved.getNode().getValue().firstIdentifierOf(Node.class);
        String dpn = nodeRef.firstKeyOf(Node.class).getId().getValue();
        BigInteger dpnId = getDpnId(dpn);
        String switchFlowRef = NatUtil.getNaptFlowRef(dpnId, tableId, String.valueOf(routerId), internalIpv4HostAddress, internalPortNumber);
        // Inform the MDSAL manager to inform about the flow removal.
        LOG.debug("onFlowRemoved : DPN ID {}, Metadata {}, SwitchFlowRef {}, " + "internalIpv4HostAddress{}", dpnId, routerId, switchFlowRef, internalIpv4AddressAsString);
        FlowEntity snatFlowEntity = NatUtil.buildFlowEntity(dpnId, tableId, switchFlowRef);
        long startTime = System.currentTimeMillis();
        mdsalManager.removeFlow(snatFlowEntity);
        LOG.debug("onFlowRemoved : Elapsed time fo deleting table-{} flow for snat ({}) session:{}ms", tableId, internalIpPortKey, (System.currentTimeMillis() - startTime));
        // Remove the SourceIP:Port key from the Napt packet handler map.
        naptPacketInHandler.removeIncomingPacketMap(internalIpPortKey);
        // Remove the mapping of internal fixed ip/port to external ip/port from the datastore.
        SessionAddress internalSessionAddress = new SessionAddress(internalIpv4HostAddress, internalPortNumber);
        naptManager.releaseIpExtPortMapping(routerId, internalSessionAddress, protocol);
        LOG.info("onFlowRemoved : exit");
    } else {
        LOG.debug("onFlowRemoved : Received flow removed notification due to flowdelete from switch for flowref");
    }
}
Also used : Layer3Match(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Layer3Match) Node(org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node) UdpMatchFields(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.UdpMatchFields) Ipv4Match(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4Match) TcpMatchFields(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.TcpMatchFields) FlowEntity(org.opendaylight.genius.mdsalutil.FlowEntity) BigInteger(java.math.BigInteger) RemovedFlowReason(org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.RemovedFlowReason) TcpMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.TcpMatch) Layer4Match(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Layer4Match) UdpMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatch) BigInteger(java.math.BigInteger) IpPortExternal(org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.natservice.rev160111.intext.ip.port.map.ip.port.mapping.intext.ip.protocol.type.ip.port.map.IpPortExternal) Ipv4Prefix(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix)

Example 3 with UdpMatch

use of org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatch in project openflowplugin by opendaylight.

the class MatchResponseConvertor2Test method testLayer4MatchSctp.

/**
 * Test {@link MatchResponseConvertor#convert(MatchEntriesGrouping, VersionDatapathIdConvertorData)}.
 */
@Test
public void testLayer4MatchSctp() {
    final MatchBuilder builder = new MatchBuilder();
    builder.setType(OxmMatchType.class);
    final List<MatchEntry> entries = new ArrayList<>();
    MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();
    entriesBuilder.setOxmClass(OpenflowBasicClass.class);
    entriesBuilder.setOxmMatchField(SctpSrc.class);
    entriesBuilder.setHasMask(false);
    final SctpSrcCaseBuilder sctpSrcCaseBuilder = new SctpSrcCaseBuilder();
    final SctpSrcBuilder portBuilder = new SctpSrcBuilder();
    portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber(13));
    sctpSrcCaseBuilder.setSctpSrc(portBuilder.build());
    entriesBuilder.setMatchEntryValue(sctpSrcCaseBuilder.build());
    entries.add(entriesBuilder.build());
    entriesBuilder = new MatchEntryBuilder();
    entriesBuilder.setOxmClass(OpenflowBasicClass.class);
    entriesBuilder.setOxmMatchField(SctpDst.class);
    entriesBuilder.setHasMask(false);
    final SctpDstCaseBuilder sctpDstCaseBuilder = new SctpDstCaseBuilder();
    final SctpDstBuilder sctpDstBuilder = new SctpDstBuilder();
    sctpDstBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber(14));
    sctpDstCaseBuilder.setSctpDst(sctpDstBuilder.build());
    entriesBuilder.setMatchEntryValue(sctpDstCaseBuilder.build());
    entries.add(entriesBuilder.build());
    builder.setMatchEntry(entries);
    final VersionDatapathIdConvertorData datapathIdConvertorData = new VersionDatapathIdConvertorData(OFConstants.OFP_VERSION_1_3);
    datapathIdConvertorData.setDatapathId(new BigInteger("42"));
    final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder salMatchBuilder = convert(builder.build(), datapathIdConvertorData);
    final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatchBuilder.build();
    final SctpMatch udpMatch = (SctpMatch) builtMatch.getLayer4Match();
    Assert.assertEquals("Wrong sctp src port", 13, udpMatch.getSctpSourcePort().getValue().intValue());
    Assert.assertEquals("Wrong sctp dst port", 14, udpMatch.getSctpDestinationPort().getValue().intValue());
}
Also used : MatchEntry(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntry) VersionDatapathIdConvertorData(org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData) SctpDstBuilder(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.sctp.dst._case.SctpDstBuilder) ArrayList(java.util.ArrayList) SctpDstCaseBuilder(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.SctpDstCaseBuilder) MatchEntryBuilder(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntryBuilder) SctpSrcBuilder(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.sctp.src._case.SctpSrcBuilder) SctpMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.SctpMatch) SctpSrcCaseBuilder(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.SctpSrcCaseBuilder) BigInteger(java.math.BigInteger) MatchBuilder(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.MatchBuilder) Test(org.junit.Test)

Example 4 with UdpMatch

use of org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatch in project openflowplugin by opendaylight.

the class MatchV10ResponseConvertorTest method testUdpMatch.

/**
 * UDP match test for {@link MatchV10ResponseConvertor#convert(MatchV10, VersionDatapathIdConvertorData)}.
 */
@Test
public void testUdpMatch() {
    // TP_SRC, TP_DST are wildcarded.
    // NW_PROTO is not wildcarded but null.
    Long dlType = 0x800L;
    FlowWildcardsV10 wc = new FlowWildcardsV10(true, true, false, true, true, true, false, true, true, true);
    MatchV10Builder builder = new MatchV10Builder().setWildcards(wc).setDlType(dlType.intValue());
    MatchV10 match = builder.build();
    BigInteger dpid = BigInteger.valueOf(12345L);
    final VersionDatapathIdConvertorData datapathIdConvertorData = new VersionDatapathIdConvertorData(OFConstants.OFP_VERSION_1_0);
    datapathIdConvertorData.setDatapathId(dpid);
    Match salMatch = convert(match, datapathIdConvertorData).build();
    EthernetMatch etherMatch = salMatch.getEthernetMatch();
    Assert.assertEquals("Wrong in port", null, salMatch.getInPort());
    Assert.assertEquals("Wrong dl src", null, etherMatch.getEthernetSource());
    Assert.assertEquals("Wrong dl dst", null, etherMatch.getEthernetDestination());
    Assert.assertEquals("Wrong dl type", dlType, etherMatch.getEthernetType().getType().getValue());
    Assert.assertEquals("Wrong VLAN match", null, salMatch.getVlanMatch());
    Assert.assertEquals("Wrong IP match", null, salMatch.getIpMatch());
    Assert.assertEquals("Wrong L3 match", null, salMatch.getLayer3Match());
    Assert.assertEquals("Wrong L4 match", null, salMatch.getLayer4Match());
    Assert.assertEquals("Wrong ICMPv4 match", null, salMatch.getIcmpv4Match());
    // Specify UDP protocol.
    Short ipProto = 17;
    match = builder.setNwProto(ipProto).build();
    salMatch = convert(match, datapathIdConvertorData).build();
    etherMatch = salMatch.getEthernetMatch();
    IpMatch ipMatch = salMatch.getIpMatch();
    Assert.assertEquals("Wrong in port", null, salMatch.getInPort());
    Assert.assertEquals("Wrong dl src", null, etherMatch.getEthernetSource());
    Assert.assertEquals("Wrong dl dst", null, etherMatch.getEthernetDestination());
    Assert.assertEquals("Wrong dl type", dlType, etherMatch.getEthernetType().getType().getValue());
    Assert.assertEquals("Wrong VLAN match", null, salMatch.getVlanMatch());
    Assert.assertEquals("Wrong ip protocol", ipProto, ipMatch.getIpProtocol());
    Assert.assertEquals("Wrong ip proto", null, ipMatch.getIpProto());
    Assert.assertEquals("Wrong ip ecn", null, ipMatch.getIpEcn());
    Assert.assertEquals("Wrong ip dscp", null, ipMatch.getIpDscp());
    Assert.assertEquals("Wrong L3 match", null, salMatch.getLayer3Match());
    Assert.assertEquals("Wrong L4 match", null, salMatch.getLayer4Match());
    Assert.assertEquals("Wrong ICMPv4 match", null, salMatch.getIcmpv4Match());
    // TP_SRC is not wildcarded but null.
    wc = new FlowWildcardsV10(true, true, false, true, true, true, false, true, true, false);
    match = builder.setWildcards(wc).build();
    salMatch = convert(match, datapathIdConvertorData).build();
    etherMatch = salMatch.getEthernetMatch();
    ipMatch = salMatch.getIpMatch();
    Assert.assertEquals("Wrong in port", null, salMatch.getInPort());
    Assert.assertEquals("Wrong dl src", null, etherMatch.getEthernetSource());
    Assert.assertEquals("Wrong dl dst", null, etherMatch.getEthernetDestination());
    Assert.assertEquals("Wrong dl type", dlType, etherMatch.getEthernetType().getType().getValue());
    Assert.assertEquals("Wrong VLAN match", null, salMatch.getVlanMatch());
    Assert.assertEquals("Wrong ip protocol", ipProto, ipMatch.getIpProtocol());
    Assert.assertEquals("Wrong ip proto", null, ipMatch.getIpProto());
    Assert.assertEquals("Wrong ip ecn", null, ipMatch.getIpEcn());
    Assert.assertEquals("Wrong ip dscp", null, ipMatch.getIpDscp());
    Assert.assertEquals("Wrong L3 match", null, salMatch.getLayer3Match());
    Assert.assertEquals("Wrong L4 match", null, salMatch.getLayer4Match());
    Assert.assertEquals("Wrong ICMPv4 match", null, salMatch.getIcmpv4Match());
    // Specify UDP source port.
    Integer srcPort = 60000;
    match = builder.setTpSrc(srcPort).build();
    salMatch = convert(match, datapathIdConvertorData).build();
    etherMatch = salMatch.getEthernetMatch();
    ipMatch = salMatch.getIpMatch();
    UdpMatch udpMatch = (UdpMatch) salMatch.getLayer4Match();
    Assert.assertEquals("Wrong in port", null, salMatch.getInPort());
    Assert.assertEquals("Wrong dl src", null, etherMatch.getEthernetSource());
    Assert.assertEquals("Wrong dl dst", null, etherMatch.getEthernetDestination());
    Assert.assertEquals("Wrong dl type", dlType, etherMatch.getEthernetType().getType().getValue());
    Assert.assertEquals("Wrong VLAN match", null, salMatch.getVlanMatch());
    Assert.assertEquals("Wrong ip protocol", ipProto, ipMatch.getIpProtocol());
    Assert.assertEquals("Wrong ip proto", null, ipMatch.getIpProto());
    Assert.assertEquals("Wrong ip ecn", null, ipMatch.getIpEcn());
    Assert.assertEquals("Wrong ip dscp", null, ipMatch.getIpDscp());
    Assert.assertEquals("Wrong L3 match", null, salMatch.getLayer3Match());
    Assert.assertEquals("Wrong UDP src", srcPort, udpMatch.getUdpSourcePort().getValue());
    Assert.assertEquals("Wrong UDP dst", null, udpMatch.getUdpDestinationPort());
    Assert.assertEquals("Wrong ICMPv4 match", null, salMatch.getIcmpv4Match());
    // TP_DST is not wildcarded but null.
    wc = new FlowWildcardsV10(true, true, false, true, true, true, false, true, false, false);
    match = builder.setWildcards(wc).build();
    salMatch = convert(match, datapathIdConvertorData).build();
    etherMatch = salMatch.getEthernetMatch();
    ipMatch = salMatch.getIpMatch();
    udpMatch = (UdpMatch) salMatch.getLayer4Match();
    Assert.assertEquals("Wrong in port", null, salMatch.getInPort());
    Assert.assertEquals("Wrong dl src", null, etherMatch.getEthernetSource());
    Assert.assertEquals("Wrong dl dst", null, etherMatch.getEthernetDestination());
    Assert.assertEquals("Wrong dl type", dlType, etherMatch.getEthernetType().getType().getValue());
    Assert.assertEquals("Wrong VLAN match", null, salMatch.getVlanMatch());
    Assert.assertEquals("Wrong ip protocol", ipProto, ipMatch.getIpProtocol());
    Assert.assertEquals("Wrong ip proto", null, ipMatch.getIpProto());
    Assert.assertEquals("Wrong ip ecn", null, ipMatch.getIpEcn());
    Assert.assertEquals("Wrong ip dscp", null, ipMatch.getIpDscp());
    Assert.assertEquals("Wrong L3 match", null, salMatch.getLayer3Match());
    Assert.assertEquals("Wrong UDP src", srcPort, udpMatch.getUdpSourcePort().getValue());
    Assert.assertEquals("Wrong UDP dst", null, udpMatch.getUdpDestinationPort());
    Assert.assertEquals("Wrong ICMPv4 match", null, salMatch.getIcmpv4Match());
    // Specify UDP destination port only.
    Integer dstPort = 6653;
    match = builder.setTpSrc(null).setTpDst(dstPort).build();
    salMatch = convert(match, datapathIdConvertorData).build();
    etherMatch = salMatch.getEthernetMatch();
    ipMatch = salMatch.getIpMatch();
    udpMatch = (UdpMatch) salMatch.getLayer4Match();
    Assert.assertEquals("Wrong in port", null, salMatch.getInPort());
    Assert.assertEquals("Wrong dl src", null, etherMatch.getEthernetSource());
    Assert.assertEquals("Wrong dl dst", null, etherMatch.getEthernetDestination());
    Assert.assertEquals("Wrong dl type", dlType, etherMatch.getEthernetType().getType().getValue());
    Assert.assertEquals("Wrong VLAN match", null, salMatch.getVlanMatch());
    Assert.assertEquals("Wrong ip protocol", ipProto, ipMatch.getIpProtocol());
    Assert.assertEquals("Wrong ip proto", null, ipMatch.getIpProto());
    Assert.assertEquals("Wrong ip ecn", null, ipMatch.getIpEcn());
    Assert.assertEquals("Wrong ip dscp", null, ipMatch.getIpDscp());
    Assert.assertEquals("Wrong L3 match", null, salMatch.getLayer3Match());
    Assert.assertEquals("Wrong UDP src", null, udpMatch.getUdpSourcePort());
    Assert.assertEquals("Wrong UDP dst", dstPort, udpMatch.getUdpDestinationPort().getValue());
    Assert.assertEquals("Wrong ICMPv4 match", null, salMatch.getIcmpv4Match());
    // Specify both source and destination port.
    srcPort = 32767;
    dstPort = 9999;
    match = builder.setTpSrc(srcPort).setTpDst(dstPort).build();
    salMatch = convert(match, datapathIdConvertorData).build();
    etherMatch = salMatch.getEthernetMatch();
    ipMatch = salMatch.getIpMatch();
    udpMatch = (UdpMatch) salMatch.getLayer4Match();
    Assert.assertEquals("Wrong in port", null, salMatch.getInPort());
    Assert.assertEquals("Wrong dl src", null, etherMatch.getEthernetSource());
    Assert.assertEquals("Wrong dl dst", null, etherMatch.getEthernetDestination());
    Assert.assertEquals("Wrong dl type", dlType, etherMatch.getEthernetType().getType().getValue());
    Assert.assertEquals("Wrong VLAN match", null, salMatch.getVlanMatch());
    Assert.assertEquals("Wrong ip protocol", ipProto, ipMatch.getIpProtocol());
    Assert.assertEquals("Wrong ip proto", null, ipMatch.getIpProto());
    Assert.assertEquals("Wrong ip ecn", null, ipMatch.getIpEcn());
    Assert.assertEquals("Wrong ip dscp", null, ipMatch.getIpDscp());
    Assert.assertEquals("Wrong L3 match", null, salMatch.getLayer3Match());
    Assert.assertEquals("Wrong UDP src", srcPort, udpMatch.getUdpSourcePort().getValue());
    Assert.assertEquals("Wrong UDP dst", dstPort, udpMatch.getUdpDestinationPort().getValue());
    Assert.assertEquals("Wrong ICMPv4 match", null, salMatch.getIcmpv4Match());
}
Also used : BigInteger(java.math.BigInteger) EthernetMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatch) FlowWildcardsV10(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowWildcardsV10) VersionDatapathIdConvertorData(org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData) MatchV10Builder(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.v10.grouping.MatchV10Builder) UdpMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatch) BigInteger(java.math.BigInteger) MatchV10(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.v10.grouping.MatchV10) IpMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.IpMatch) TcpMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.TcpMatch) UdpMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatch) Icmpv4Match(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Icmpv4Match) EthernetMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatch) Match(org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match) Ipv4Match(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4Match) IpMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.IpMatch) Test(org.junit.Test)

Example 5 with UdpMatch

use of org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatch in project genius by opendaylight.

the class ActionSetUdpDestinationPortTest method verifyAction.

private void verifyAction(Action action) {
    assertTrue(action.getAction() instanceof SetFieldCase);
    SetFieldCase actionCase = (SetFieldCase) action.getAction();
    assertNotNull(actionCase.getSetField().getLayer4Match());
    assertTrue(actionCase.getSetField().getLayer4Match() instanceof UdpMatch);
    UdpMatch tcpMatch = (UdpMatch) actionCase.getSetField().getLayer4Match();
    assertEquals(PORT, tcpMatch.getUdpDestinationPort().getValue().intValue());
}
Also used : SetFieldCase(org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetFieldCase) UdpMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatch)

Aggregations

UdpMatch (org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatch)8 BigInteger (java.math.BigInteger)5 Test (org.junit.Test)5 ArrayList (java.util.ArrayList)4 VersionDatapathIdConvertorData (org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData)4 PortNumber (org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber)4 EthernetMatch (org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatch)4 IpMatch (org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.IpMatch)4 Ipv4Match (org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4Match)4 TcpMatch (org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.TcpMatch)4 Icmpv4Match (org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Icmpv4Match)3 UdpMatchBuilder (org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatchBuilder)3 FlowWildcardsV10 (org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowWildcardsV10)3 MatchEntry (org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntry)3 MatchEntryBuilder (org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntryBuilder)3 MatchV10Builder (org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.v10.grouping.MatchV10Builder)3 SetFieldCase (org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetFieldCase)2 MatchBuilder (org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder)2 UdpDstCaseBuilder (org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.UdpDstCaseBuilder)2 UdpSrcCaseBuilder (org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.UdpSrcCaseBuilder)2