ab94db07533682a7889acd83a3a8a3f6a5fead1b
[openflowplugin.git] / openflowjava / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / deserialization / match / OxmIpv6SrcDeserializer.java
1 /*
2  * Copyright (c) 2013 Pantheon Technologies s.r.o. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.openflowjava.protocol.impl.deserialization.match;
9
10 import io.netty.buffer.ByteBuf;
11 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
12 import org.opendaylight.openflowjava.util.ByteBufUtils;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Src;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MatchField;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OpenflowBasicClass;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OxmClassBase;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntry;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntryBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6SrcCaseBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.src._case.Ipv6SrcBuilder;
21
22 /**
23  * Translates OxmIpv6Src messages.
24  *
25  * @author michal.polkorab
26  */
27 public class OxmIpv6SrcDeserializer extends AbstractOxmMatchEntryDeserializer {
28     @Override
29     public MatchEntry deserialize(final ByteBuf input) {
30         MatchEntryBuilder builder = processHeader(getOxmClass(), getOxmField(), input);
31         addIpv6SrcValue(input, builder);
32         return builder.build();
33     }
34
35     private static void addIpv6SrcValue(final ByteBuf input, final MatchEntryBuilder builder) {
36         Ipv6SrcCaseBuilder caseBuilder = new Ipv6SrcCaseBuilder();
37         Ipv6SrcBuilder ipv6Builder = new Ipv6SrcBuilder();
38         ipv6Builder.setIpv6Address(ByteBufUtils.readIetfIpv6Address(input));
39         if (builder.isHasMask()) {
40             ipv6Builder.setMask(OxmDeserializerHelper.convertMask(
41                     input, EncodeConstants.SIZE_OF_IPV6_ADDRESS_IN_BYTES));
42         }
43         caseBuilder.setIpv6Src(ipv6Builder.build());
44         builder.setMatchEntryValue(caseBuilder.build());
45     }
46
47     @Override
48     protected Class<? extends MatchField> getOxmField() {
49         return Ipv6Src.class;
50     }
51
52     @Override
53     protected Class<? extends OxmClassBase> getOxmClass() {
54         return OpenflowBasicClass.class;
55     }
56 }