Merge "Javadoc update"
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / util / OF10MatchDeserializer.java
1 /* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */\r
2 package org.opendaylight.openflowjava.protocol.impl.util;\r
3 \r
4 import io.netty.buffer.ByteBuf;\r
5 \r
6 import java.util.ArrayList;\r
7 import java.util.List;\r
8 \r
9 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;\r
10 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;\r
11 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.match.v10.grouping.MatchV10;\r
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.match.v10.grouping.MatchV10Builder;\r
13 \r
14 import com.google.common.base.Joiner;\r
15 \r
16 /**\r
17  * Deserializes ofp_match (OpenFlow v1.0) structure\r
18  * @author michal.polkorab\r
19  */\r
20 public abstract class OF10MatchDeserializer {\r
21     \r
22     private static final byte MAC_ADDRESS_LENGTH = 6;\r
23     private static final byte PADDING_IN_MATCH = 1;\r
24     private static final byte PADDING_IN_MATCH_2 = 2;\r
25     private static final byte GROUPS_IN_IPV4_ADDRESS = 4;\r
26 \r
27     /**\r
28      * Creates ofp_match (OpenFlow v1.0) structure\r
29      * @param rawMessage ByteBuf with input data\r
30      * @return ofp_match (OpenFlow v1.0)\r
31      */\r
32     public static MatchV10 createMatchV10(ByteBuf rawMessage) {\r
33         MatchV10Builder builder = new MatchV10Builder();\r
34         builder.setWildcards(rawMessage.readUnsignedInt());\r
35         builder.setInPort(rawMessage.readUnsignedShort());\r
36         StringBuffer dlSrc = new StringBuffer();\r
37         for(int i = 0; i < MAC_ADDRESS_LENGTH; i++){\r
38             short mac = rawMessage.readUnsignedByte();\r
39             dlSrc.append(String.format("%02X", mac));\r
40         }\r
41         builder.setDlSrc(new MacAddress(dlSrc.toString()));\r
42         StringBuffer dlDst = new StringBuffer();\r
43         for(int i = 0; i < MAC_ADDRESS_LENGTH; i++){\r
44             short mac = rawMessage.readUnsignedByte();\r
45             dlDst.append(String.format("%02X", mac));\r
46         }\r
47         builder.setDlDst(new MacAddress(dlDst.toString()));\r
48         builder.setDlVlan(rawMessage.readUnsignedShort());\r
49         builder.setDlVlanPcp(rawMessage.readUnsignedByte());\r
50         rawMessage.skipBytes(PADDING_IN_MATCH);\r
51         builder.setDlType(rawMessage.readUnsignedShort());\r
52         builder.setNwTos(rawMessage.readUnsignedByte());\r
53         builder.setNwProto(rawMessage.readUnsignedByte());\r
54         rawMessage.skipBytes(PADDING_IN_MATCH_2);\r
55         List<String> srcGroups = new ArrayList<>();\r
56         for (int i = 0; i < GROUPS_IN_IPV4_ADDRESS; i++) {\r
57             srcGroups.add(Short.toString(rawMessage.readUnsignedByte()));\r
58         }\r
59         Joiner joiner = Joiner.on(".");\r
60         builder.setNwSrc(new Ipv4Address(joiner.join(srcGroups)));\r
61         List<String> dstGroups = new ArrayList<>();\r
62         for (int i = 0; i < GROUPS_IN_IPV4_ADDRESS; i++) {\r
63             dstGroups.add(Short.toString(rawMessage.readUnsignedByte()));\r
64         }\r
65         builder.setNwSrc(new Ipv4Address(joiner.join(dstGroups)));\r
66         builder.setTpSrc(rawMessage.readUnsignedShort());\r
67         builder.setTpDst(rawMessage.readUnsignedShort());\r
68         return builder.build();\r
69     }\r
70     \r
71 }\r