package org.opendaylight.controller.sal.compability;
+import static org.opendaylight.controller.sal.compability.ProtocolConstants.ETHERNET_ARP;
+import static org.opendaylight.controller.sal.compability.ProtocolConstants.SCTP;
+import static org.opendaylight.controller.sal.compability.ProtocolConstants.TCP;
+import static org.opendaylight.controller.sal.compability.ProtocolConstants.UDP;
import static org.opendaylight.controller.sal.match.MatchType.DL_DST;
import static org.opendaylight.controller.sal.match.MatchType.DL_SRC;
import static org.opendaylight.controller.sal.match.MatchType.DL_TYPE;
import java.net.InetAddress;
import java.util.ArrayList;
-import java.util.HashSet;
import java.util.List;
-import java.util.Set;
import org.opendaylight.controller.sal.action.*;
import org.opendaylight.controller.sal.core.NodeConnector;
import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.EtherType;
import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanPcp;
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.MacAddressFilter;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.arp.match.fields.ArpSourceHardwareAddress;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.arp.match.fields.ArpTargetHardwareAddress;
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.ethernet.match.fields.EthernetType;
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.*;
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._3.match.ArpMatch;
private static void fillFrom(Match target, IpMatch ipMatch) {
if (ipMatch != null) {
Short ipProtocol = ipMatch.getIpProtocol();
- if (ipProtocol != null) {
+
+ if (ipProtocol != null && target.getField(NW_PROTO) == null) {
target.setField(NW_PROTO, ipProtocol.byteValue());
}
Dscp dscp = ipMatch.getIpDscp();
target.setField(TP_DST, udpDestPortValue.shortValue());
}
}
+
+ target.setField(NW_PROTO, UDP);
}
private static void fillTransportLayer(Match target, TcpMatch source) {
target.setField(TP_DST, tcpDestPortValue.shortValue());
}
}
+
+ target.setField(NW_PROTO, TCP);
}
private static void fillTransportLayer(Match target, SctpMatch source) {
target.setField(TP_DST, sctpDestPortValue.shortValue());
}
}
+
+ target.setField(NW_PROTO, SCTP);
+
}
private static void fillFrom(Match target, Layer3Match source) {
if (sourceAddress != null) {
target.setField(NW_SRC, (InetAddress) inetAddressFrom(sourceAddress), null);
}
- Ipv4Prefix destAddress = source.getArpSourceTransportAddress();
+ Ipv4Prefix destAddress = source.getArpTargetTransportAddress();
if (destAddress != null) {
target.setField(NW_DST, (InetAddress) inetAddressFrom(destAddress), null);
}
+ ArpSourceHardwareAddress sourceHwAddress = source.getArpSourceHardwareAddress();
+ if (sourceHwAddress != null) {
+ target.setField(DL_SRC, sourceHwAddress.getAddress().getValue().getBytes());
+ }
+ ArpTargetHardwareAddress targetHwAddress = source.getArpTargetHardwareAddress();
+ if (targetHwAddress != null) {
+ target.setField(DL_DST, targetHwAddress.getAddress().getValue().getBytes());
+ }
+
+ target.setField(DL_TYPE, new Short(ETHERNET_ARP));
+
}
private static void fillFromIpv6(Match target, Ipv6Match source) {
if (sourceAddress != null) {
target.setField(NW_SRC, (InetAddress) inetAddressFrom(sourceAddress), null);
}
- Ipv6Prefix destAddress = source.getIpv6Source();
+ Ipv6Prefix destAddress = source.getIpv6Destination();
if (destAddress != null) {
target.setField(NW_DST, (InetAddress) inetAddressFrom(destAddress), null);
}
if (sourceAddress != null) {
target.setField(NW_SRC, (InetAddress) inetAddressFrom(sourceAddress), null);
}
- Ipv4Prefix destAddress = source.getIpv4Source();
+ Ipv4Prefix destAddress = source.getIpv4Destination();
if (destAddress != null) {
target.setField(NW_DST, (InetAddress) inetAddressFrom(destAddress), null);
}
EthernetType ethType = source.getEthernetType();
if (ethType != null) {
EtherType ethInnerType = ethType.getType();
- if (ethInnerType != null) {
+ if (ethInnerType != null && target.getField(DL_TYPE) == null) {
Long value = ethInnerType.getValue();
target.setField(DL_TYPE, value.shortValue());
}