2 * Copyright (c) 2015 Cisco Systems, Inc. All rights reserved.
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
8 package org.opendaylight.lispflowmapping.lisp.serializer.address;
10 import static org.opendaylight.yangtools.yang.common.UintConversions.fromJava;
12 import java.nio.ByteBuffer;
13 import org.opendaylight.lispflowmapping.lisp.type.LispCanonicalAddressFormatEnum;
14 import org.opendaylight.lispflowmapping.lisp.util.ByteUtil;
15 import org.opendaylight.lispflowmapping.lisp.util.NumberUtil;
16 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana.afn.safi.rev130704.AddressFamily;
17 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddress;
18 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.ServicePathIdType;
19 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.ServicePathLcaf;
20 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.Address;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ServicePath;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.service.path.ServicePathBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.EidBuilder;
27 * Class to (de)serialize Service Path data type.
29 * @author Lorand Jakab
32 public final class ServicePathSerializer extends LcafSerializer {
34 private static final ServicePathSerializer INSTANCE = new ServicePathSerializer();
36 // Private constructor prevents instantiation from other classes
37 private ServicePathSerializer() {
40 public static ServicePathSerializer getInstance() {
45 protected byte getLcafType() {
46 return LispCanonicalAddressFormatEnum.SERVICE_PATH.getLispCode();
50 protected short getLcafLength(LispAddress lispAddress) {
51 return (short) (Length.SPI + Length.SI);
55 protected short getAfi() {
56 return (short) AddressFamily.LispCanonicalAddressFormat.getIntValue();
60 protected void serializeData(ByteBuffer buffer, LispAddress lispAddress) {
61 ServicePath sp = (ServicePath) lispAddress.getAddress();
62 buffer.put(ByteUtil.partialIntToByteArray(NumberUtil.asInt(
63 sp.getServicePath().getServicePathId().getValue().intValue()), Length.SPI));
64 buffer.put((byte) NumberUtil.asShort(sp.getServicePath().getServiceIndex().toJava()));
68 protected Eid deserializeLcafEidData(ByteBuffer buffer, byte res2, short length, LispAddressSerializerContext ctx) {
69 EidBuilder eb = new EidBuilder();
70 eb.setAddressType(ServicePathLcaf.class);
71 eb.setVirtualNetworkId(getVni(ctx));
72 eb.setAddress(deserializeData(buffer));
76 private Address deserializeData(ByteBuffer buffer) {
77 ServicePathBuilder spb = new ServicePathBuilder();
78 byte[] spi = new byte[3];
80 spb.setServicePathId(new ServicePathIdType(fromJava((long) ByteUtil.getPartialInt(spi))));
81 spb.setServiceIndex(fromJava((short) ByteUtil.getUnsignedByte(buffer)));
82 return new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105
83 .lisp.address.address.ServicePathBuilder().setServicePath(spb.build()).build();
86 private interface Length {