2 * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.
\r
4 * This program and the accompanying materials are made available under the
\r
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
\r
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
\r
8 package org.opendaylight.openflowjava.protocol.impl.serialization.match;
\r
10 import io.netty.buffer.ByteBuf;
\r
12 import java.util.ArrayList;
\r
13 import java.util.Arrays;
\r
14 import java.util.List;
\r
16 import org.opendaylight.openflowjava.protocol.impl.util.EncodeConstants;
\r
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv6AddressMatchEntry;
\r
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntries;
\r
20 import com.google.common.base.Splitter;
\r
21 import com.google.common.collect.Lists;
\r
24 * Parent for Ipv6 address based match entry serializers
\r
25 * @author michal.polkorab
\r
27 public abstract class AbstractOxmIpv6AddressSerializer extends AbstractOxmMatchEntrySerializer {
\r
30 public void serialize(MatchEntries entry, ByteBuf outBuffer) {
\r
31 super.serialize(entry, outBuffer);
\r
32 String textAddress = entry.getAugmentation(Ipv6AddressMatchEntry.class).getIpv6Address().getValue();
\r
33 List<String> address;
\r
34 if (textAddress.equals("::")) {
\r
35 String[] tmp = new String[EncodeConstants.GROUPS_IN_IPV6_ADDRESS];
\r
36 Arrays.fill(tmp, "0");
\r
37 address = Arrays.asList(tmp);
\r
39 address = parseIpv6Address(Lists.newArrayList(Splitter.on(":").split(textAddress)));
\r
41 for (String group : address) {
\r
42 outBuffer.writeShort(Integer.parseInt(group, 16));
\r
44 writeMask(entry, outBuffer, getValueLength());
\r
47 private static List<String> parseIpv6Address(ArrayList<String> addressGroups) {
\r
49 for (String group : addressGroups) {
\r
50 if (group.equals("")) {
\r
54 List<String> ready = new ArrayList<>(EncodeConstants.GROUPS_IN_IPV6_ADDRESS);
\r
55 switch (countEmpty) {
\r
57 ready = addressGroups;
\r
60 int zerosToBePushed = EncodeConstants.GROUPS_IN_IPV6_ADDRESS - addressGroups.size() + 1;
\r
61 for (String group : addressGroups) {
\r
62 if (group.equals("")) {
\r
63 for (int j = 0; j < zerosToBePushed; j++) {
\r
72 String[] tmp = new String[EncodeConstants.GROUPS_IN_IPV6_ADDRESS];
\r
73 Arrays.fill(tmp, "0");
\r
74 tmp[EncodeConstants.GROUPS_IN_IPV6_ADDRESS - 1] =
\r
75 addressGroups.get(addressGroups.size() - 1);
\r
76 ready = Arrays.asList(tmp);
\r
79 throw new IllegalStateException("Incorrect ipv6 address");
\r