2 * Copyright (c) 2016 Cisco Systems, Inc. and others. 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.protocol.bgp.labeled.unicast;
10 import com.google.common.base.Preconditions;
11 import io.netty.buffer.ByteBuf;
12 import java.util.ArrayList;
13 import java.util.List;
14 import org.opendaylight.protocol.bgp.parser.spi.BgpPrefixSidTlvParser;
15 import org.opendaylight.protocol.bgp.parser.spi.BgpPrefixSidTlvSerializer;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.labeled.unicast.rev180329.Srgb;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.labeled.unicast.rev180329.originator.srgb.tlv.SrgbValue;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.labeled.unicast.rev180329.originator.srgb.tlv.SrgbValueBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.labeled.unicast.rev180329.update.attributes.bgp.prefix.sid.bgp.prefix.sid.tlvs.bgp.prefix.sid.tlv.LuOriginatorSrgbTlv;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.labeled.unicast.rev180329.update.attributes.bgp.prefix.sid.bgp.prefix.sid.tlvs.bgp.prefix.sid.tlv.LuOriginatorSrgbTlvBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.path.attributes.attributes.bgp.prefix.sid.bgp.prefix.sid.tlvs.BgpPrefixSidTlv;
23 final class OriginatorSrgbTlvParser implements BgpPrefixSidTlvParser, BgpPrefixSidTlvSerializer {
25 private static final int ORIGINATOR_SRGB_TYPE = 3;
26 private static final int ORIGINATOR_FLAGS_BYTES = 2;
27 private static final int SRGB_LENGTH = 6;
30 public LuOriginatorSrgbTlv parseBgpPrefixSidTlv(final ByteBuf buffer) {
31 buffer.readBytes(ORIGINATOR_FLAGS_BYTES);
32 final List<SrgbValue> srgbList = parseSrgbs(buffer);
33 return new LuOriginatorSrgbTlvBuilder().setSrgbValue(srgbList).build();
36 private static List<SrgbValue> parseSrgbs(final ByteBuf buffer) {
37 Preconditions.checkState(buffer.readableBytes() % SRGB_LENGTH == 0, "Number of SRGBs doesn't fit available bytes.");
38 final List<SrgbValue> ret = new ArrayList<>();
39 while (buffer.isReadable()) {
40 ret.add(new SrgbValueBuilder().setBase(new Srgb((long) buffer.readUnsignedMedium())).setRange(new Srgb((long) buffer.readUnsignedMedium())).build());
46 public void serializeBgpPrefixSidTlv(final BgpPrefixSidTlv tlv, final ByteBuf valueBuf) {
47 Preconditions.checkArgument(tlv instanceof LuOriginatorSrgbTlv, "Incoming TLV is not LuOriginatorSrgbTlv");
48 final LuOriginatorSrgbTlv luTlv = (LuOriginatorSrgbTlv) tlv;
49 valueBuf.writeZero(ORIGINATOR_FLAGS_BYTES);
50 for (final SrgbValue val : luTlv.getSrgbValue()) {
51 valueBuf.writeMedium(val.getBase().getValue().intValue());
52 valueBuf.writeMedium(val.getRange().getValue().intValue());
57 public int getType() {
58 return ORIGINATOR_SRGB_TYPE;