BUG-2794 : refactored code to use BitArray
[bgpcep.git] / bgp / linkstate / src / main / java / org / opendaylight / protocol / bgp / linkstate / attribute / sr / SrPrefixAttributesParser.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 io.netty.buffer.ByteBuf;
11 import org.opendaylight.protocol.util.BitArray;
12 import org.opendaylight.protocol.util.ByteArray;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.prefix.state.SrPrefix;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.prefix.state.SrPrefixBuilder;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.rev150206.Algorithm;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.rev150206.PrefixSid.Flags;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.rev150206.SidLabel;
18
19 public final class SrPrefixAttributesParser {
20
21     private static final int FLAGS_SIZE = 8;
22
23     private SrPrefixAttributesParser() {
24         throw new UnsupportedOperationException();
25     }
26
27     /* Flags */
28     private static final int RE_ADVERTISEMENT = 0;
29     private static final int NODE_SID = 1;
30     private static final int NO_PHP = 2;
31     private static final int EXPLICIT_NULL = 3;
32     private static final int VALUE = 4;
33     private static final int LOCAL = 5;
34
35     public static SrPrefix parseSrPrefix(final ByteBuf buffer) {
36         final BitArray flags = BitArray.valueOf(buffer, FLAGS_SIZE);
37         final SrPrefixBuilder builder = new SrPrefixBuilder();
38         builder.setFlags(new Flags(flags.get(EXPLICIT_NULL), flags.get(LOCAL), flags.get(NO_PHP), flags.get(NODE_SID), flags.get(RE_ADVERTISEMENT), flags.get(VALUE)));
39         builder.setAlgorithm(Algorithm.forValue(buffer.readUnsignedByte()));
40         builder.setSid(new SidLabel(ByteArray.readAllBytes(buffer)));
41         return builder.build();
42     }
43
44     public static void serializeSrPrefix(final SrPrefix srPrefix, final ByteBuf buffer) {
45         final Flags flags = srPrefix.getFlags();
46         final BitArray bs = new BitArray(FLAGS_SIZE);
47         bs.set(RE_ADVERTISEMENT, flags.isReadvertisement());
48         bs.set(NODE_SID, flags.isNodeSid());
49         bs.set(NO_PHP, flags.isNoPhp());
50         bs.set(EXPLICIT_NULL, flags.isExplicitNull());
51         bs.set(VALUE, flags.isValue());
52         bs.set(LOCAL, flags.isLocal());
53         bs.toByteBuf(buffer);
54         buffer.writeByte(srPrefix.getAlgorithm().getIntValue());
55         buffer.writeBytes(srPrefix.getSid().getValue());
56     }
57 }