2 * Copyright (c) 2015 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.linkstate.attribute.sr;
10 import com.google.common.primitives.UnsignedBytes;
11 import io.netty.buffer.ByteBuf;
12 import java.util.ArrayList;
13 import java.util.BitSet;
14 import java.util.List;
15 import org.opendaylight.protocol.util.ByteArray;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.node.state.SrAlgorithm;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.node.state.SrAlgorithmBuilder;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.node.state.SrCapabilities;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.node.state.SrCapabilitiesBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.node.state.SrSidLabel;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.rev150206.Algorithm;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.rev150206.SidLabel;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.rev150206.SrCapabilities.Flags;
25 public final class SrNodeAttributesParser {
27 private static final int FLAGS_SIZE = 1;
29 private static final int SID_TLV_TYPE = 1;
31 /* SR Capabilities flags */
32 private static final int IPV4 = 7;
33 private static final int IPV6 = 6;
35 public static SrSidLabel parseSidLabelBinding(final ByteBuf buffer) {
36 // TODO Auto-generated method stub
40 public static SrCapabilities parseSrCapabilities(final ByteBuf buffer) {
41 final SrCapabilitiesBuilder builder = new SrCapabilitiesBuilder();
42 final BitSet flags = BitSet.valueOf(ByteArray.readBytes(buffer, FLAGS_SIZE));
43 builder.setFlags(new Flags(flags.get(IPV4), flags.get(IPV6)));
44 builder.setValueRange((long)buffer.readUnsignedMedium());
46 builder.setSid(new SidLabel(ByteArray.readAllBytes(buffer)));
47 return builder.build();
50 public static void serializeSrCapabilities(final SrCapabilities caps, final ByteBuf buffer) {
51 final Flags flags = caps.getFlags();
52 final BitSet bs = new BitSet(FLAGS_SIZE);
53 if (flags.isIpv4() != null) {
54 bs.set(IPV4, flags.isIpv4());
56 if (flags.isIpv6() != null) {
57 bs.set(IPV6, flags.isIpv6());
59 buffer.writeBytes(bs.toByteArray());
60 buffer.writeMedium(caps.getValueRange().intValue());
61 buffer.writeByte(SID_TLV_TYPE);
62 final byte[] sid = caps.getSid().getValue();
63 buffer.writeByte(sid.length);
64 buffer.writeBytes(sid);
67 public static SrAlgorithm parseSrAlgorithms(final ByteBuf buffer) {
68 final SrAlgorithmBuilder builder = new SrAlgorithmBuilder();
69 final List<Algorithm> algs = new ArrayList<>();
70 while (buffer.isReadable()) {
71 algs.add(Algorithm.forValue(UnsignedBytes.toInt(buffer.readByte())));
73 builder.setAlgorithm(algs);
74 return builder.build();
77 public static void serializeSrAlgorithms(final SrAlgorithm alg, final ByteBuf buffer) {
78 if (alg.getAlgorithm() != null) {
79 for (final Algorithm a : alg.getAlgorithm()) {
80 buffer.writeByte(a.getIntValue());