YANG revision dates mass-update
[bgpcep.git] / bgp / extensions / mvpn / src / main / java / org / opendaylight / protocol / bgp / mvpn / impl / nlri / Ipv4NlriHandler.java
1 /*
2  * Copyright (c) 2018 AT&T Intellectual Property. 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.mvpn.impl.nlri;
9
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;
23
24 /**
25  * Handles Ipv4 Family nlri.
26  *
27  * @author Claudio D. Gasparini
28  */
29 public final class Ipv4NlriHandler {
30     private Ipv4NlriHandler() {
31         // Hidden on purpose
32     }
33
34     static DestinationMvpnIpv4AdvertizedCase parseIpv4ReachNlri(
35         final ByteBuf nlri,
36         final boolean addPathSupported) {
37         final List<MvpnDestination> dests = new ArrayList<>();
38
39         while (nlri.isReadable()) {
40             final MvpnDestinationBuilder builder = new MvpnDestinationBuilder();
41             if (addPathSupported) {
42                 builder.setPathId(PathIdUtil.readPathId(nlri));
43             }
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());
49         }
50
51         return new DestinationMvpnIpv4AdvertizedCaseBuilder()
52             .setDestinationMvpn(new DestinationMvpnBuilder().setMvpnDestination(dests).build()).build();
53     }
54
55     static DestinationMvpnIpv4WithdrawnCase parseIpv4UnreachNlri(
56         final ByteBuf nlri,
57         final boolean addPathSupported) {
58         final List<MvpnDestination> dests = new ArrayList<>();
59
60         while (nlri.isReadable()) {
61             final MvpnDestinationBuilder builder = new MvpnDestinationBuilder();
62             if (addPathSupported) {
63                 builder.setPathId(PathIdUtil.readPathId(nlri));
64             }
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());
70         }
71
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();
76     }
77
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()));
81         }
82     }
83 }