MVPN RFC6514 Extendend communities
[bgpcep.git] / bgp / inet / src / main / java / org / opendaylight / protocol / bgp / inet / codec / Ipv6BgpPrefixSidParser.java
1 /*
2  * Copyright (c) 2016 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.inet.codec;
9
10 import com.google.common.base.Preconditions;
11 import io.netty.buffer.ByteBuf;
12 import org.opendaylight.protocol.bgp.parser.spi.BgpPrefixSidTlvParser;
13 import org.opendaylight.protocol.bgp.parser.spi.BgpPrefixSidTlvSerializer;
14 import org.opendaylight.protocol.util.BitArray;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev180329.update.attributes.bgp.prefix.sid.bgp.prefix.sid.tlvs.bgp.prefix.sid.tlv.Ipv6SidTlv;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev180329.update.attributes.bgp.prefix.sid.bgp.prefix.sid.tlvs.bgp.prefix.sid.tlv.Ipv6SidTlvBuilder;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.path.attributes.attributes.bgp.prefix.sid.bgp.prefix.sid.tlvs.BgpPrefixSidTlv;
18
19 public final class Ipv6BgpPrefixSidParser implements BgpPrefixSidTlvParser, BgpPrefixSidTlvSerializer {
20
21     private static final int IPV6_SID_TYPE = 2;
22     private static final int RESERVED = 1;
23     private static final int FLAGS_SIZE = 2 * Byte.SIZE;
24     private static final int PROCESS_IPV6_HEADER_FLAG = 0;
25
26     @Override
27     public void serializeBgpPrefixSidTlv(final BgpPrefixSidTlv tlv, final ByteBuf bytes) {
28         Preconditions.checkArgument(tlv instanceof Ipv6SidTlv, "Incoming TLV is not Ipv6SidTlv");
29         final Ipv6SidTlv ipv6Tlv = (Ipv6SidTlv) tlv;
30         bytes.writeZero(RESERVED);
31         final BitArray flags = new BitArray(FLAGS_SIZE);
32         flags.set(PROCESS_IPV6_HEADER_FLAG, ipv6Tlv.isProcessIpv6HeadAbility());
33         flags.toByteBuf(bytes);
34     }
35
36     @Override
37     public Ipv6SidTlv parseBgpPrefixSidTlv(final ByteBuf buffer) {
38         buffer.readBytes(RESERVED);
39         final boolean canProcessIpv6Header = BitArray.valueOf(buffer, FLAGS_SIZE).get(PROCESS_IPV6_HEADER_FLAG);
40         return new Ipv6SidTlvBuilder().setProcessIpv6HeadAbility(canProcessIpv6Header).build();
41     }
42
43     @Override
44     public int getType() {
45         return IPV6_SID_TYPE;
46     }
47 }