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 io.netty.buffer.ByteBuf;
11 import java.util.BitSet;
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;
19 public class SrPrefixAttributesParser {
21 private static final int FLAGS_SIZE = 1;
24 private static final int RE_ADVERTISEMENT = 7;
25 private static final int NODE_SID = 6;
26 private static final int NO_PHP = 5;
27 private static final int EXPLICIT_NULL = 4;
28 private static final int VALUE = 3;
29 private static final int LOCAL = 2;
31 public static SrPrefix parseSrPrefix(final ByteBuf buffer) {
32 final BitSet flags = BitSet.valueOf(ByteArray.readBytes(buffer, FLAGS_SIZE));
33 final SrPrefixBuilder builder = new SrPrefixBuilder();
34 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)));
35 builder.setAlgorithm(Algorithm.forValue(buffer.readUnsignedByte()));
36 builder.setSid(new SidLabel(ByteArray.readAllBytes(buffer)));
37 return builder.build();
40 public static void serializeSrPrefix(final SrPrefix srPrefix, final ByteBuf buffer) {
41 final Flags flags = srPrefix.getFlags();
42 final BitSet bs = new BitSet(FLAGS_SIZE);
43 if (flags.isReadvertisement() != null) {
44 bs.set(RE_ADVERTISEMENT, flags.isReadvertisement());
46 if (flags.isNodeSid() != null) {
47 bs.set(NODE_SID, flags.isNodeSid());
49 if (flags.isNoPhp() != null) {
50 bs.set(NO_PHP, flags.isNoPhp());
52 if (flags.isExplicitNull() != null) {
53 bs.set(EXPLICIT_NULL, flags.isExplicitNull());
55 if (flags.isValue() != null) {
56 bs.set(VALUE, flags.isValue());
58 if (flags.isLocal() != null) {
59 bs.set(LOCAL, flags.isLocal());
61 buffer.writeBytes(bs.toByteArray());
62 buffer.writeByte(srPrefix.getAlgorithm().getIntValue());
63 buffer.writeBytes(srPrefix.getSid().getValue());