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 * Deserializes ofp_match (OpenFlow v1.0) structure
\r
18 * @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
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
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 byte[] dlSrc = new byte[MAC_ADDRESS_LENGTH];
\r
37 rawMessage.readBytes(dlSrc);
\r
38 builder.setDlSrc(new MacAddress(ByteBufUtils.macAddressToString(dlSrc)));
\r
39 byte[] dlDst = new byte[MAC_ADDRESS_LENGTH];
\r
40 rawMessage.readBytes(dlDst);
\r
41 builder.setDlDst(new MacAddress(ByteBufUtils.macAddressToString(dlDst)));
\r
42 builder.setDlVlan(rawMessage.readUnsignedShort());
\r
43 builder.setDlVlanPcp(rawMessage.readUnsignedByte());
\r
44 rawMessage.skipBytes(PADDING_IN_MATCH);
\r
45 builder.setDlType(rawMessage.readUnsignedShort());
\r
46 builder.setNwTos(rawMessage.readUnsignedByte());
\r
47 builder.setNwProto(rawMessage.readUnsignedByte());
\r
48 rawMessage.skipBytes(PADDING_IN_MATCH_2);
\r
49 List<String> srcGroups = new ArrayList<>();
\r
50 for (int i = 0; i < GROUPS_IN_IPV4_ADDRESS; i++) {
\r
51 srcGroups.add(Short.toString(rawMessage.readUnsignedByte()));
\r
53 Joiner joiner = Joiner.on(".");
\r
54 builder.setNwSrc(new Ipv4Address(joiner.join(srcGroups)));
\r
55 List<String> dstGroups = new ArrayList<>();
\r
56 for (int i = 0; i < GROUPS_IN_IPV4_ADDRESS; i++) {
\r
57 dstGroups.add(Short.toString(rawMessage.readUnsignedByte()));
\r
59 builder.setNwSrc(new Ipv4Address(joiner.join(dstGroups)));
\r
60 builder.setTpSrc(rawMessage.readUnsignedShort());
\r
61 builder.setTpDst(rawMessage.readUnsignedShort());
\r
62 return builder.build();
\r