BUG-608 : implemented parsers/serializers for
[bgpcep.git] / bgp / linkstate / src / main / java / org / opendaylight / protocol / bgp / linkstate / attribute / sr / SrNodeAttributesParser.java
1 /*
2  * Copyright (c) 2015 Cisco Systems, Inc. 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.protocol.bgp.linkstate.attribute.sr;
9
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;
24
25 public final class SrNodeAttributesParser {
26
27     private static final int FLAGS_SIZE = 1;
28
29     private static final int SID_TLV_TYPE = 1;
30
31     /* SR Capabilities flags */
32     private static final int IPV4 = 7;
33     private static final int IPV6 = 6;
34
35     public static SrSidLabel parseSidLabelBinding(final ByteBuf buffer) {
36         // TODO Auto-generated method stub
37         return null;
38     }
39
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());
45         buffer.skipBytes(2);
46         builder.setSid(new SidLabel(ByteArray.readAllBytes(buffer)));
47         return builder.build();
48     }
49
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());
55         }
56         if (flags.isIpv6() != null) {
57             bs.set(IPV6, flags.isIpv6());
58         }
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);
65     }
66
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())));
72         }
73         builder.setAlgorithm(algs);
74         return builder.build();
75     }
76
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());
81             }
82         }
83     }
84 }