2 * Copyright (c) 2018 AT&T Intellectual Property. 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
9 package org.opendaylight.protocol.bgp.mvpn.impl.nlri;
11 import io.netty.buffer.ByteBuf;
12 import java.util.ArrayList;
13 import java.util.List;
14 import org.opendaylight.protocol.bgp.mvpn.spi.pojo.nlri.SimpleMvpnNlriRegistry;
15 import org.opendaylight.protocol.bgp.parser.spi.PathIdUtil;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv6.rev180417.mvpn.destination.MvpnDestination;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv6.rev180417.mvpn.destination.MvpnDestinationBuilder;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv6.rev180417.update.attributes.mp.reach.nlri.advertized.routes.destination.type.DestinationMvpnIpv6AdvertizedCase;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv6.rev180417.update.attributes.mp.reach.nlri.advertized.routes.destination.type.DestinationMvpnIpv6AdvertizedCaseBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv6.rev180417.update.attributes.mp.reach.nlri.advertized.routes.destination.type.destination.mvpn.ipv6.advertized._case.DestinationMvpnBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv6.rev180417.update.attributes.mp.unreach.nlri.withdrawn.routes.destination.type.DestinationMvpnIpv6WithdrawnCase;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv6.rev180417.update.attributes.mp.unreach.nlri.withdrawn.routes.destination.type.DestinationMvpnIpv6WithdrawnCaseBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.NlriType;
26 * Handles Ipv6 Family nlri.
28 * @author Claudio D. Gasparini
30 public final class Ipv6NlriHandler {
31 private Ipv6NlriHandler() {
32 throw new UnsupportedOperationException();
35 static DestinationMvpnIpv6AdvertizedCase parseIpv6ReachNlri(
37 final boolean addPathSupported) {
38 final List<MvpnDestination> dests = new ArrayList<>();
40 while (nlri.isReadable()) {
41 final MvpnDestinationBuilder builder = new MvpnDestinationBuilder();
42 if (addPathSupported) {
43 builder.setPathId(PathIdUtil.readPathId(nlri));
45 final NlriType type = NlriType.forValue(nlri.readUnsignedByte());
46 final int length = nlri.readUnsignedByte();
47 final ByteBuf nlriBuf = nlri.readSlice(length);
48 builder.setMvpnChoice(SimpleMvpnNlriRegistry.getInstance().parseMvpn(type, nlriBuf));
49 dests.add(builder.build());
52 return new DestinationMvpnIpv6AdvertizedCaseBuilder().setDestinationMvpn(
53 new DestinationMvpnBuilder().setMvpnDestination(dests).build()).build();
56 static DestinationMvpnIpv6WithdrawnCase parseIpv6UnreachNlri(
58 final boolean addPathSupported) {
59 final List<MvpnDestination> dests = new ArrayList<>();
61 while (nlri.isReadable()) {
62 final MvpnDestinationBuilder builder = new MvpnDestinationBuilder();
63 if (addPathSupported) {
64 builder.setPathId(PathIdUtil.readPathId(nlri));
66 final NlriType type = NlriType.forValue(nlri.readUnsignedByte());
67 final int length = nlri.readUnsignedByte();
68 final ByteBuf nlriBuf = nlri.readSlice(length);
69 builder.setMvpnChoice(SimpleMvpnNlriRegistry.getInstance().parseMvpn(type, nlriBuf));
70 dests.add(builder.build());
73 return new DestinationMvpnIpv6WithdrawnCaseBuilder().setDestinationMvpn(
74 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv6.rev180417.update
75 .attributes.mp.unreach.nlri.withdrawn.routes.destination.type.destination.mvpn.ipv6.withdrawn
76 ._case.DestinationMvpnBuilder().setMvpnDestination(dests).build()).build();
79 public static void serializeNlri(final List<MvpnDestination> destinationList, final ByteBuf output) {
80 for (final MvpnDestination dest : destinationList) {
81 output.writeBytes(SimpleMvpnNlriRegistry.getInstance().serializeMvpn(dest.getMvpnChoice()));