2 * Copyright (c) 2014 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 io.netty.buffer.Unpooled;
12 import org.opendaylight.protocol.util.BitArray;
13 import org.opendaylight.protocol.util.ByteArray;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.link.state.SrAdjId;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.link.state.SrAdjIdBuilder;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.link.state.SrLanAdjId;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.link.state.SrLanAdjIdBuilder;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.rev150206.AdjacencyFlags;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.rev150206.SidLabel;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.rev150206.Weight;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.network.concepts.rev131125.IsoSystemIdentifier;
23 public final class SrLinkAttributesParser {
25 private static final int ISO_SYSTEM_ID_SIZE = 6;
28 private static final int ADDRESS_FAMILY_FLAG = 0;
29 private static final int BACKUP_FLAG = 1;
30 private static final int VALUE_FLAG = 2;
31 private static final int LOCAL_FLAG = 3;
32 private static final int SET_FLAG = 4;
33 private static final int FLAGS_SIZE = 8;
35 private SrLinkAttributesParser() {
36 throw new UnsupportedOperationException();
39 public static SrAdjId parseAdjacencySegmentIdentifier(final ByteBuf buffer) {
40 if (!buffer.isReadable()) {
41 return new SrAdjIdBuilder().build();
43 final SrAdjIdBuilder srAdjIdBuilder = new SrAdjIdBuilder();
44 final BitArray flags = BitArray.valueOf(buffer, FLAGS_SIZE);
45 srAdjIdBuilder.setFlags(new AdjacencyFlags(flags.get(ADDRESS_FAMILY_FLAG), flags.get(BACKUP_FLAG), flags.get(LOCAL_FLAG), flags.get(SET_FLAG), flags.get(VALUE_FLAG)));
46 srAdjIdBuilder.setWeight(new Weight(buffer.readUnsignedByte()));
47 srAdjIdBuilder.setSid(new SidLabel(ByteArray.readAllBytes(buffer)));
48 return srAdjIdBuilder.build();
51 public static ByteBuf serializeAdjacencySegmentIdentifier(final SrAdjId srAdjId) {
52 final ByteBuf value = Unpooled.buffer();
53 final AdjacencyFlags srAdjIdFlags = srAdjId.getFlags();
54 final BitArray flags = new BitArray(FLAGS_SIZE);
55 flags.set(ADDRESS_FAMILY_FLAG, srAdjIdFlags.isAddressFamily());
56 flags.set(BACKUP_FLAG, srAdjIdFlags.isBackup());
57 flags.set(VALUE_FLAG, srAdjIdFlags.isValue());
58 flags.set(LOCAL_FLAG, srAdjIdFlags.isLocal());
59 flags.set(SET_FLAG, srAdjIdFlags.isSetFlag());
60 flags.toByteBuf(value);
61 value.writeByte(srAdjId.getWeight().getValue());
62 value.writeBytes(srAdjId.getSid().getValue());
66 public static SrLanAdjId parseLanAdjacencySegmentIdentifier(final ByteBuf buffer) {
67 if (!buffer.isReadable()) {
68 return new SrLanAdjIdBuilder().build();
70 final SrLanAdjIdBuilder srLanAdjIdBuilder = new SrLanAdjIdBuilder();
71 final BitArray flags = BitArray.valueOf(buffer, FLAGS_SIZE);
72 srLanAdjIdBuilder.setFlags(new AdjacencyFlags(flags.get(ADDRESS_FAMILY_FLAG), flags.get(BACKUP_FLAG), flags.get(LOCAL_FLAG), flags.get(SET_FLAG), flags.get(VALUE_FLAG)));
73 srLanAdjIdBuilder.setWeight(new Weight(buffer.readUnsignedByte()));
74 srLanAdjIdBuilder.setIsoSystemId(new IsoSystemIdentifier(ByteArray.readBytes(buffer, ISO_SYSTEM_ID_SIZE)));
75 srLanAdjIdBuilder.setSid(new SidLabel(ByteArray.readAllBytes(buffer)));
76 return srLanAdjIdBuilder.build();
79 public static ByteBuf serializeLanAdjacencySegmentIdentifier(final SrLanAdjId srLanAdjId) {
80 final ByteBuf value = Unpooled.buffer();
81 final AdjacencyFlags srAdjIdFlags = srLanAdjId.getFlags();
82 final BitArray flags = new BitArray(FLAGS_SIZE);
83 flags.set(ADDRESS_FAMILY_FLAG, srAdjIdFlags.isAddressFamily());
84 flags.set(BACKUP_FLAG, srAdjIdFlags.isBackup());
85 flags.set(VALUE_FLAG, srAdjIdFlags.isValue());
86 flags.set(LOCAL_FLAG, srAdjIdFlags.isLocal());
87 flags.set(SET_FLAG, srAdjIdFlags.isSetFlag());
88 flags.toByteBuf(value);
89 value.writeByte(srLanAdjId.getWeight().getValue());
90 value.writeBytes(srLanAdjId.getIsoSystemId().getValue());
91 value.writeBytes(srLanAdjId.getSid().getValue());