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
8 package org.opendaylight.protocol.bgp.mvpn.impl.nlri;
10 import io.netty.buffer.ByteBuf;
11 import java.util.ArrayList;
12 import java.util.List;
13 import org.opendaylight.protocol.bgp.mvpn.spi.pojo.nlri.SimpleMvpnNlriRegistry;
14 import org.opendaylight.protocol.bgp.parser.spi.PathIdUtil;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv4.rev180417.mvpn.destination.MvpnDestination;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv4.rev180417.mvpn.destination.MvpnDestinationBuilder;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv4.rev180417.update.attributes.mp.reach.nlri.advertized.routes.destination.type.DestinationMvpnIpv4AdvertizedCase;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv4.rev180417.update.attributes.mp.reach.nlri.advertized.routes.destination.type.DestinationMvpnIpv4AdvertizedCaseBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv4.rev180417.update.attributes.mp.reach.nlri.advertized.routes.destination.type.destination.mvpn.ipv4.advertized._case.DestinationMvpnBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv4.rev180417.update.attributes.mp.unreach.nlri.withdrawn.routes.destination.type.DestinationMvpnIpv4WithdrawnCase;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv4.rev180417.update.attributes.mp.unreach.nlri.withdrawn.routes.destination.type.DestinationMvpnIpv4WithdrawnCaseBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev200120.NlriType;
25 * Handles Ipv4 Family nlri.
27 * @author Claudio D. Gasparini
29 public final class Ipv4NlriHandler {
30 private Ipv4NlriHandler() {
34 static DestinationMvpnIpv4AdvertizedCase parseIpv4ReachNlri(
36 final boolean addPathSupported) {
37 final List<MvpnDestination> dests = new ArrayList<>();
39 while (nlri.isReadable()) {
40 final MvpnDestinationBuilder builder = new MvpnDestinationBuilder();
41 if (addPathSupported) {
42 builder.setPathId(PathIdUtil.readPathId(nlri));
44 final NlriType type = NlriType.forValue(nlri.readUnsignedByte());
45 final int length = nlri.readUnsignedByte();
46 final ByteBuf nlriBuf = nlri.readSlice(length);
47 builder.setMvpnChoice(SimpleMvpnNlriRegistry.getInstance().parseMvpn(type, nlriBuf));
48 dests.add(builder.build());
51 return new DestinationMvpnIpv4AdvertizedCaseBuilder()
52 .setDestinationMvpn(new DestinationMvpnBuilder().setMvpnDestination(dests).build()).build();
55 static DestinationMvpnIpv4WithdrawnCase parseIpv4UnreachNlri(
57 final boolean addPathSupported) {
58 final List<MvpnDestination> dests = new ArrayList<>();
60 while (nlri.isReadable()) {
61 final MvpnDestinationBuilder builder = new MvpnDestinationBuilder();
62 if (addPathSupported) {
63 builder.setPathId(PathIdUtil.readPathId(nlri));
65 final NlriType type = NlriType.forValue(nlri.readUnsignedByte());
66 final int length = nlri.readUnsignedByte();
67 final ByteBuf nlriBuf = nlri.readSlice(length);
68 builder.setMvpnChoice(SimpleMvpnNlriRegistry.getInstance().parseMvpn(type, nlriBuf));
69 dests.add(builder.build());
72 return new DestinationMvpnIpv4WithdrawnCaseBuilder().setDestinationMvpn(
73 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv4.rev180417.update
74 .attributes.mp.unreach.nlri.withdrawn.routes.destination.type.destination.mvpn.ipv4
75 .withdrawn._case.DestinationMvpnBuilder().setMvpnDestination(dests).build()).build();
78 public static void serializeNlri(final List<MvpnDestination> destinationList, final ByteBuf output) {
79 for (final MvpnDestination dest : destinationList) {
80 output.writeBytes(SimpleMvpnNlriRegistry.getInstance().serializeMvpn(dest.getMvpnChoice()));