X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-compability%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fcompability%2FFromSalConversionsUtils.java;h=6503a3031e96461e89240d637d6f90e7c768a5d0;hb=0e4aa6c7f5a4c66c3778d4eaa488eaa91f964fac;hp=e77375fc41a0d53367008064dc67f1a9b21b5d63;hpb=312dabba7b74f8d0e78ef698a01866095eca912d;p=controller.git diff --git a/opendaylight/md-sal/sal-compability/src/main/java/org/opendaylight/controller/sal/compability/FromSalConversionsUtils.java b/opendaylight/md-sal/sal-compability/src/main/java/org/opendaylight/controller/sal/compability/FromSalConversionsUtils.java index e77375fc41..6503a3031e 100644 --- a/opendaylight/md-sal/sal-compability/src/main/java/org/opendaylight/controller/sal/compability/FromSalConversionsUtils.java +++ b/opendaylight/md-sal/sal-compability/src/main/java/org/opendaylight/controller/sal/compability/FromSalConversionsUtils.java @@ -12,180 +12,94 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import org.opendaylight.controller.sal.action.Controller; -import org.opendaylight.controller.sal.action.Drop; -import org.opendaylight.controller.sal.action.Flood; -import org.opendaylight.controller.sal.action.FloodAll; -import org.opendaylight.controller.sal.action.HwPath; -import org.opendaylight.controller.sal.action.Loopback; -import org.opendaylight.controller.sal.action.Output; -import org.opendaylight.controller.sal.action.PopVlan; -import org.opendaylight.controller.sal.action.PushVlan; -import org.opendaylight.controller.sal.action.SetDlDst; -import org.opendaylight.controller.sal.action.SetDlSrc; -import org.opendaylight.controller.sal.action.SetDlType; -import org.opendaylight.controller.sal.action.SetNextHop; -import org.opendaylight.controller.sal.action.SetNwDst; -import org.opendaylight.controller.sal.action.SetNwSrc; -import org.opendaylight.controller.sal.action.SetNwTos; -import org.opendaylight.controller.sal.action.SetTpDst; -import org.opendaylight.controller.sal.action.SetTpSrc; -import org.opendaylight.controller.sal.action.SetVlanCfi; -import org.opendaylight.controller.sal.action.SetVlanId; -import org.opendaylight.controller.sal.action.SetVlanPcp; -import org.opendaylight.controller.sal.action.SwPath; import org.opendaylight.controller.sal.core.NodeConnector; -import org.opendaylight.controller.sal.flowprogrammer.Flow; + + + import org.opendaylight.controller.sal.match.Match; import org.opendaylight.controller.sal.match.MatchField; import org.opendaylight.controller.sal.match.MatchType; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Dscp; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Prefix; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri; +import org.opendaylight.controller.sal.utils.NetUtils; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.*; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.FlowAdded; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.FlowAddedBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.ControllerActionBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.OutputActionBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.flow.Action; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.flow.ActionBuilder; + +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.*; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.address.Address; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.address.address.Ipv4Builder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.address.address.Ipv6Builder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRef; +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef; import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.EtherType; import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId; import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanPcp; -import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.arp.match.fields.ArpSourceHardwareAddressBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.arp.match.fields.ArpTargetHardwareAddressBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.ethernet.match.fields.EthernetDestinationBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.ethernet.match.fields.EthernetSourceBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.ethernet.match.fields.EthernetTypeBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.EthernetMatch; -import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.EthernetMatchBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.IpMatch; -import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.IpMatchBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.Layer3Match; -import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.Layer4Match; -import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.VlanMatch; -import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.VlanMatchBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._3.match.ArpMatchBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._3.match.Ipv4MatchBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._3.match.Ipv6MatchBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._4.match.SctpMatchBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._4.match.TcpMatchBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._4.match.UdpMatchBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.vlan.match.fields.VlanIdBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.arp.match.fields.ArpSourceHardwareAddressBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.arp.match.fields.ArpTargetHardwareAddressBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetDestinationBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetSourceBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetTypeBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.*; +import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.ArpMatchBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv6MatchBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.SctpMatchBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.TcpMatchBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatchBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.vlan.match.fields.VlanIdBuilder; -public class FromSalConversionsUtils { +import com.google.common.net.InetAddresses; - // source: http://en.wikipedia.org/wiki/Ethertype - private static final Short ETHERNET_ARP = new Short((short) 0x0806); - // source: http://en.wikipedia.org/wiki/List_of_IP_protocol_numbers - private static final short TCP = (short) 0x06; - private static final short UDP = (short) 0x11; - private static final short SCTP = (short) 0x84; - private FromSalConversionsUtils() { - } - public static FlowAdded flowFrom(Flow sourceFlow) { - if (sourceFlow != null) { - final FlowAddedBuilder targetFlow = new FlowAddedBuilder(); - targetFlow.setHardTimeout(new Integer(sourceFlow.getHardTimeout())); - targetFlow.setIdleTimeout(new Integer(sourceFlow.getIdleTimeout())); - targetFlow.setPriority(new Integer(sourceFlow.getPriority())); - targetFlow.setCookie(new BigInteger(String.valueOf(sourceFlow.getId()))); - List sourceActions = sourceFlow.getActions(); - List targetActions = new ArrayList<>(); - for (org.opendaylight.controller.sal.action.Action sourceAction : sourceActions) { - targetActions.add(actionFrom(sourceAction)); - } - targetFlow.setAction(targetActions); - targetFlow.setMatch(matchFrom(sourceFlow.getMatch())); +import static org.opendaylight.controller.sal.compability.ProtocolConstants.*; +import static org.opendaylight.controller.sal.compability.NodeMapping.*; + +public class FromSalConversionsUtils { + + private FromSalConversionsUtils() { - return targetFlow.build(); - } - return null; } - private static Action actionFrom(org.opendaylight.controller.sal.action.Action sourceAction) { - - ActionBuilder targetActionBuilder = new ActionBuilder(); - org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.Action targetAction = null; - - if (sourceAction instanceof Controller) { - targetAction = new ControllerActionBuilder().build(); - } else if (sourceAction instanceof Drop) { - // TODO: define maping - } else if (sourceAction instanceof Flood) { - // TODO: define maping - } else if (sourceAction instanceof FloodAll) { - // TODO: define maping - } else if (sourceAction instanceof HwPath) { - // TODO: define maping - } else if (sourceAction instanceof Loopback) { - // TODO: define maping - } else if (sourceAction instanceof Output) { - NodeConnector nodeConnector = ((Output) sourceAction).getPort(); - - OutputActionBuilder outputActionBuilder = new OutputActionBuilder(); - outputActionBuilder.setOutputNodeConnector(nodeConnectorToUri(nodeConnector)); - targetAction = outputActionBuilder.build(); - - } else if (sourceAction instanceof PopVlan) { - // TODO: define maping - } else if (sourceAction instanceof PushVlan) { - // TODO: define maping - } else if (sourceAction instanceof SetDlDst) { - // TODO: define maping - } else if (sourceAction instanceof SetDlSrc) { - // TODO: define maping - } else if (sourceAction instanceof SetDlType) { - // TODO: define maping - } else if (sourceAction instanceof SetNextHop) { - // TODO: define maping - } else if (sourceAction instanceof SetNwDst) { - // TODO: define maping - } else if (sourceAction instanceof SetNwSrc) { - // TODO: define maping - } else if (sourceAction instanceof SetNwTos) { - // TODO: define maping - } else if (sourceAction instanceof SetTpDst) { - // TODO: define maping - } else if (sourceAction instanceof SetTpSrc) { - // TODO: define maping - } else if (sourceAction instanceof SetVlanCfi) { - // TODO: define maping - } else if (sourceAction instanceof SetVlanId) { - // TODO: define maping - } else if (sourceAction instanceof SetVlanPcp) { - // TODO: define maping - } else if (sourceAction instanceof SwPath) { - // TODO: define maping - } + public static GetNodeConnectorStatisticsInput nodeConnectorStatistics( + NodeConnector connector) { + GetNodeConnectorStatisticsInputBuilder target = new GetNodeConnectorStatisticsInputBuilder(); - targetActionBuilder.setAction(targetAction); + NodeRef nodeRef = toNodeRef(connector.getNode()); + target.setNode(nodeRef); - return targetActionBuilder.build(); + NodeConnectorRef nodeConnectorRef = toNodeConnectorRef(connector); + target.setNodeConnector(nodeConnectorRef); + + return target.build(); } - private static List nodeConnectorToUri(NodeConnector nodeConnector) { - // TODO Define mapping + private static Address addressFromAction(InetAddress inetAddress) { + String strInetAddresss = InetAddresses.toAddrString(inetAddress); + if (inetAddress instanceof Inet4Address) { + Ipv4Builder ipv4Builder = new Ipv4Builder(); + ipv4Builder.setIpv4Address(new Ipv4Prefix(strInetAddresss)); + return ipv4Builder.build(); + } else if (inetAddress instanceof Inet6Address) { + Ipv6Builder ipv6Builder = new Ipv6Builder(); + ipv6Builder.setIpv6Address(new Ipv6Prefix(strInetAddresss)); + return ipv6Builder.build(); + } return null; } - private static org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.flow.Match matchFrom( + public static org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match toMatch( Match sourceMatch) { if (sourceMatch != null) { - org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.flow.MatchBuilder targetBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.flow.MatchBuilder(); + MatchBuilder targetBuilder = new MatchBuilder(); - targetBuilder.setEthernetMatch(ethernetMatchFrom(sourceMatch)); - targetBuilder.setIpMatch(ipMatchFrom(sourceMatch)); - targetBuilder.setVlanMatch(vlanMatchFrom(sourceMatch)); + targetBuilder.setEthernetMatch(ethernetMatch(sourceMatch)); + targetBuilder.setIpMatch(ipMatch(sourceMatch)); + targetBuilder.setVlanMatch(vlanMatch(sourceMatch)); targetBuilder.setLayer3Match(layer3Match(sourceMatch)); targetBuilder.setLayer4Match(layer4Match(sourceMatch)); @@ -199,16 +113,15 @@ public class FromSalConversionsUtils { MatchField nwProto = sourceMatch.getField(MatchType.NW_PROTO); Short nwProtocolSource = null; if (nwProto != null && nwProto.getValue() != null) { - nwProtocolSource = (Short) (nwProto.getValue()); - } - - switch (nwProtocolSource) { - case TCP: - return Layer4MatchAsTcp(sourceMatch); - case UDP: - return Layer4MatchAsUdp(sourceMatch); - case SCTP: - return Layer4MatchAsSctp(sourceMatch); + nwProtocolSource = (short) ((byte) nwProto.getValue()); + switch (nwProtocolSource) { + case TCP: + return Layer4MatchAsTcp(sourceMatch); + case UDP: + return Layer4MatchAsUdp(sourceMatch); + case SCTP: + return Layer4MatchAsSctp(sourceMatch); + } } return null; } @@ -216,14 +129,16 @@ public class FromSalConversionsUtils { private static Layer4Match Layer4MatchAsSctp(final Match sourceMatch) { SctpMatchBuilder sctpMatchBuilder = new SctpMatchBuilder(); - Integer sourcePort = transportPortFrom(sourceMatch, MatchType.TP_SRC); - Integer destinationPort = transportPortFrom(sourceMatch, MatchType.TP_DST); + Integer sourcePort = transportPort(sourceMatch, MatchType.TP_SRC); + Integer destinationPort = transportPort(sourceMatch, + MatchType.TP_DST); if (sourcePort != null) { sctpMatchBuilder.setSctpSourcePort(new PortNumber(sourcePort)); } if (destinationPort != null) { - sctpMatchBuilder.setSctpDestinationPort(new PortNumber(destinationPort)); + sctpMatchBuilder.setSctpDestinationPort(new PortNumber( + destinationPort)); } return sctpMatchBuilder.build(); @@ -232,15 +147,17 @@ public class FromSalConversionsUtils { private static Layer4Match Layer4MatchAsUdp(final Match sourceMatch) { UdpMatchBuilder udpMatchBuilder = new UdpMatchBuilder(); - Integer sourcePort = transportPortFrom(sourceMatch, MatchType.TP_SRC); - Integer destinationPort = transportPortFrom(sourceMatch, MatchType.TP_DST); + Integer sourcePort = transportPort(sourceMatch, MatchType.TP_SRC); + Integer destinationPort = transportPort(sourceMatch, + MatchType.TP_DST); if (sourcePort != null) { udpMatchBuilder.setUdpSourcePort(new PortNumber(sourcePort)); } if (destinationPort != null) { - udpMatchBuilder.setUdpDestinationPort(new PortNumber(destinationPort)); + udpMatchBuilder.setUdpDestinationPort(new PortNumber( + destinationPort)); } return udpMatchBuilder.build(); @@ -249,90 +166,98 @@ public class FromSalConversionsUtils { private static Layer4Match Layer4MatchAsTcp(final Match sourceMatch) { TcpMatchBuilder tcpMatchBuilder = new TcpMatchBuilder(); - Integer sourcePort = transportPortFrom(sourceMatch, MatchType.TP_SRC); - Integer destinationPort = transportPortFrom(sourceMatch, MatchType.TP_DST); + Integer sourcePort = transportPort(sourceMatch, MatchType.TP_SRC); + Integer destinationPort = transportPort(sourceMatch, + MatchType.TP_DST); if (sourcePort != null) { tcpMatchBuilder.setTcpSourcePort(new PortNumber(sourcePort)); } if (destinationPort != null) { - tcpMatchBuilder.setTcpDestinationPort(new PortNumber(destinationPort)); + tcpMatchBuilder.setTcpDestinationPort(new PortNumber( + destinationPort)); } return tcpMatchBuilder.build(); } - private static Integer transportPortFrom(final Match sourceMatch, final MatchType matchType) { + private static Integer transportPort(final Match sourceMatch, + final MatchType matchType) { MatchField transportPort = sourceMatch.getField(matchType); - if (transportPort != null && transportPort.getValue() != null) { - return (Integer) (transportPort.getValue()); + if (transportPort != null && transportPort.getValue() != null + && transportPort.getValue().getClass().equals(Short.class)) { + return new Integer(NetUtils.getUnsignedShort((short) transportPort + .getValue())); } return null; } - private static VlanMatch vlanMatchFrom(final Match sourceMatch) { + private static VlanMatch vlanMatch(final Match sourceMatch) { VlanMatchBuilder vlanMatchBuild = new VlanMatchBuilder(); MatchField vlan = sourceMatch.getField(MatchType.DL_VLAN); if (vlan != null && vlan.getValue() != null) { VlanIdBuilder vlanIDBuilder = new VlanIdBuilder(); - vlanIDBuilder.setVlanId(new VlanId((Integer) (vlan.getValue()))); + vlanIDBuilder.setVlanId(new VlanId((int) (NetUtils + .getUnsignedShort((short) vlan.getValue())))); vlanMatchBuild.setVlanId(vlanIDBuilder.build()); } MatchField vlanPriority = sourceMatch.getField(MatchType.DL_VLAN_PR); if (vlanPriority != null && vlanPriority.getValue() != null) { - vlanMatchBuild.setVlanPcp(new VlanPcp((Short) (vlanPriority.getValue()))); + vlanMatchBuild.setVlanPcp(new VlanPcp((short) ((byte) vlanPriority + .getValue()))); } return vlanMatchBuild.build(); } - private static IpMatch ipMatchFrom(final Match sourceMatch) { + private static IpMatch ipMatch(final Match sourceMatch) { IpMatchBuilder targetIpMatchBuild = new IpMatchBuilder(); MatchField networkTos = sourceMatch.getField(MatchType.NW_TOS); if (networkTos != null && networkTos.getValue() != null) { - Dscp dscp = new Dscp((Short) (networkTos.getValue())); + Dscp dscp = new Dscp( + (short) (NetUtils.getUnsignedByte((Byte) networkTos + .getValue()))); targetIpMatchBuild.setIpDscp(dscp); } MatchField protocol = sourceMatch.getField(MatchType.NW_PROTO); if (protocol != null && protocol.getValue() != null) { - targetIpMatchBuild.setIpProtocol((Short) (protocol.getValue())); + targetIpMatchBuild.setIpProtocol((short) ((byte) protocol + .getValue())); } return targetIpMatchBuild.build(); } - private static EthernetMatch ethernetMatchFrom(final Match sourceMatch) { + private static EthernetMatch ethernetMatch(final Match sourceMatch) { final EthernetMatchBuilder targetEthMatchBuild = new EthernetMatchBuilder(); EthernetSourceBuilder ethSourBuild = new EthernetSourceBuilder() - .setAddress(ethernetSourceAddressFrom(sourceMatch)); + .setAddress(ethernetSourceAddress(sourceMatch)); targetEthMatchBuild.setEthernetSource(ethSourBuild.build()); - final MatchField dataLinkDest = sourceMatch.getField(DL_DST); - if (dataLinkDest != null && dataLinkDest.getValue() != null) { - final MacAddress macDestAddress; - macDestAddress = new MacAddress((String) (dataLinkDest.getValue())); - EthernetDestinationBuilder ethDestBuild = new EthernetDestinationBuilder().setAddress(macDestAddress); - targetEthMatchBuild.setEthernetDestination(ethDestBuild.build()); - } + EthernetDestinationBuilder ethDestBuild = new EthernetDestinationBuilder() + .setAddress(ethernetDestAddress(sourceMatch)); + targetEthMatchBuild.setEthernetDestination(ethDestBuild.build()); final MatchField dataLinkType = sourceMatch.getField(MatchType.DL_TYPE); if (dataLinkType != null && dataLinkType.getValue() != null) { - EtherType etherType = new EtherType((Long) (dataLinkType.getValue())); - EthernetTypeBuilder ethType = new EthernetTypeBuilder().setType(etherType); + EtherType etherType = new EtherType(new Long( + NetUtils.getUnsignedShort((Short) dataLinkType.getValue()))); + EthernetTypeBuilder ethType = new EthernetTypeBuilder() + .setType(etherType); targetEthMatchBuild.setEthernetType(ethType.build()); } return targetEthMatchBuild.build(); } - private static MacAddress ethernetSourceAddressFrom(final Match sourceMatch) { + private static MacAddress ethernetSourceAddress(final Match sourceMatch) { final MatchField dataLinkSource = sourceMatch.getField(DL_SRC); if (dataLinkSource != null && dataLinkSource.getValue() != null) { - return new MacAddress(new MacAddress((String) (dataLinkSource.getValue()))); + return MDFlowMapping.toMacAddress((byte[])dataLinkSource.getValue()); } return null; @@ -351,75 +276,101 @@ public class FromSalConversionsUtils { inetDestAddress = (InetAddress) (netDest.getValue()); } - if ((inetSourceAddress instanceof Inet4Address) && (inetDestAddress instanceof Inet4Address)) { + if ((inetSourceAddress instanceof Inet4Address) + && (inetDestAddress instanceof Inet4Address)) { MatchField dataLinkType = sourceMatch.getField(DL_TYPE); Short dLType = null; if (dataLinkType != null && dataLinkType.getValue() != null) { dLType = (Short) (dataLinkType.getValue()); } - if (dLType.equals(ETHERNET_ARP)) { - return setLayer3MatchAsArp(sourceMatch, (Inet4Address) inetSourceAddress, + if (dLType != null && dLType.equals(ETHERNET_ARP)) { + return setLayer3MatchAsArp(sourceMatch, + (Inet4Address) inetSourceAddress, (Inet4Address) inetDestAddress); } else { - return setLayer3MatchAsIpv4((Inet4Address) inetSourceAddress, (Inet4Address) inetDestAddress); + return setLayer3MatchAsIpv4((Inet4Address) inetSourceAddress, + (Inet4Address) inetDestAddress); } - } else if ((inetSourceAddress instanceof Inet6Address) && (inetDestAddress instanceof Inet6Address)) { - return setLayer3MatchAsIpv6((Inet6Address) inetSourceAddress, (Inet6Address) inetDestAddress); + } else if ((inetSourceAddress instanceof Inet6Address) + && (inetDestAddress instanceof Inet6Address)) { + return setLayer3MatchAsIpv6((Inet6Address) inetSourceAddress, + (Inet6Address) inetDestAddress); } return null; } - private static Layer3Match setLayer3MatchAsArp(final Match sourceMatch, final Inet4Address inetSourceAddress, + private static Layer3Match setLayer3MatchAsArp(final Match sourceMatch, + final Inet4Address inetSourceAddress, final Inet4Address inetDestAddress) { - byte[] inetSourceAddressValue = inetSourceAddress.getAddress(); - Ipv4Prefix ipv4SourcePrefix = new Ipv4Prefix(Arrays.toString(inetSourceAddressValue)); + String inetSourceAddressStr = InetAddresses + .toAddrString(inetSourceAddress); + Ipv4Prefix ipv4SourcePrefix = new Ipv4Prefix(inetSourceAddressStr); - byte[] inetDestAddressValue = inetDestAddress.getAddress(); - Ipv4Prefix ipv4DestPrefix = new Ipv4Prefix(Arrays.toString(inetDestAddressValue)); + String inetDestAddressValue = InetAddresses + .toAddrString(inetDestAddress); + Ipv4Prefix ipv4DestPrefix = new Ipv4Prefix(inetDestAddressValue); ArpMatchBuilder arpMatchBuilder = new ArpMatchBuilder(); arpMatchBuilder.setArpSourceTransportAddress(ipv4SourcePrefix); - arpMatchBuilder.setArpSourceTransportAddress(ipv4DestPrefix); + arpMatchBuilder.setArpTargetTransportAddress(ipv4DestPrefix); ArpSourceHardwareAddressBuilder arpSourceHardwareAddressBuilder = new ArpSourceHardwareAddressBuilder(); - arpSourceHardwareAddressBuilder.setAddress(ethernetSourceAddressFrom(sourceMatch)); - arpMatchBuilder.setArpSourceHardwareAddress(arpSourceHardwareAddressBuilder.build()); + arpSourceHardwareAddressBuilder + .setAddress(ethernetSourceAddress(sourceMatch)); + arpMatchBuilder + .setArpSourceHardwareAddress(arpSourceHardwareAddressBuilder + .build()); ArpTargetHardwareAddressBuilder arpTargetHardwareAddressBuilder = new ArpTargetHardwareAddressBuilder(); - arpTargetHardwareAddressBuilder.setAddress(ethernetDestAddressFrom(sourceMatch)); - arpMatchBuilder.setArpTargetHardwareAddress(arpTargetHardwareAddressBuilder.build()); + arpTargetHardwareAddressBuilder + .setAddress(ethernetDestAddress(sourceMatch)); + arpMatchBuilder + .setArpTargetHardwareAddress(arpTargetHardwareAddressBuilder + .build()); return arpMatchBuilder.build(); } - private static MacAddress ethernetDestAddressFrom(final Match sourceMatch) { + private static MacAddress ethernetDestAddress(final Match sourceMatch) { final MatchField dataLinkDest = sourceMatch.getField(DL_DST); if (dataLinkDest != null && dataLinkDest.getValue() != null) { - return new MacAddress((String) (dataLinkDest.getValue())); + return MDFlowMapping.toMacAddress((byte[]) dataLinkDest.getValue()); } return null; } - private static Layer3Match setLayer3MatchAsIpv4(final Inet4Address inetSourceAddress, + private static Layer3Match setLayer3MatchAsIpv4( + final Inet4Address inetSourceAddress, final Inet4Address inetDestAddress) { - byte[] inetAddressValue = inetSourceAddress.getAddress(); + String inetSrcAddressString = InetAddresses + .toAddrString(inetSourceAddress); + String inetDstAddressString = InetAddresses + .toAddrString(inetDestAddress); Ipv4MatchBuilder layer4MatchBuild = new Ipv4MatchBuilder(); - layer4MatchBuild.setIpv4Source(new Ipv4Prefix(Arrays.toString(inetAddressValue))); + layer4MatchBuild.setIpv4Source(new Ipv4Prefix(inetSrcAddressString)); + layer4MatchBuild + .setIpv4Destination(new Ipv4Prefix(inetDstAddressString)); return layer4MatchBuild.build(); } - private static Layer3Match setLayer3MatchAsIpv6(final Inet6Address inetSourceAddress, + private static Layer3Match setLayer3MatchAsIpv6( + final Inet6Address inetSourceAddress, final Inet6Address inetDestAddress) { - byte[] inetAddressValue = inetSourceAddress.getAddress(); + String inetSrcAddressString = InetAddresses + .toAddrString(inetSourceAddress); + String inetDstAddressString = InetAddresses + .toAddrString(inetDestAddress); Ipv6MatchBuilder layer6MatchBuild = new Ipv6MatchBuilder(); - layer6MatchBuild.setIpv6Source(new Ipv6Prefix(Arrays.toString(inetAddressValue))); + layer6MatchBuild.setIpv6Source(new Ipv6Prefix(inetSrcAddressString)); + layer6MatchBuild + .setIpv6Destination(new Ipv6Prefix(inetDstAddressString)); return layer6MatchBuild.build(); }