1 /* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */
\r
2 package org.opendaylight.openflowjava.protocol.impl.util;
\r
4 import io.netty.buffer.ByteBuf;
\r
6 import java.util.ArrayList;
\r
7 import java.util.List;
\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
14 import com.google.common.base.Joiner;
\r
17 * @author michal.polkorab
\r
20 public abstract class OF10MatchDeserializer {
\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
30 * @return ofp_match (OpenFlow v1.0)
\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
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
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
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
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