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 org.opendaylight.protocol.bgp.parser.BGPParsingException;
12 import org.opendaylight.protocol.bgp.parser.BgpTableTypeImpl;
13 import org.opendaylight.protocol.bgp.parser.spi.MultiPathSupportUtil;
14 import org.opendaylight.protocol.bgp.parser.spi.NlriParser;
15 import org.opendaylight.protocol.bgp.parser.spi.NlriSerializer;
16 import org.opendaylight.protocol.bgp.parser.spi.PeerSpecificParserConstraint;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.path.attributes.Attributes;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.AttributesReach;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.AttributesUnreach;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.update.attributes.MpReachNlriBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.update.attributes.MpUnreachNlriBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.update.attributes.mp.reach.nlri.AdvertizedRoutes;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.update.attributes.mp.reach.nlri.AdvertizedRoutesBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.update.attributes.mp.unreach.nlri.WithdrawnRoutes;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.update.attributes.mp.unreach.nlri.WithdrawnRoutesBuilder;
26 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;
27 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;
30 * https://tools.ietf.org/html/rfc6514#section-4.
32 * @author Claudio D. Gasparini
34 public final class MvpnIpv6NlriHandler implements NlriParser, NlriSerializer {
36 public void parseNlri(
38 final MpReachNlriBuilder builder,
39 final PeerSpecificParserConstraint constraint) throws BGPParsingException {
40 if (!nlri.isReadable()) {
43 final boolean mPathSupported = MultiPathSupportUtil.isTableTypeSupported(constraint,
44 new BgpTableTypeImpl(builder.getAfi(), builder.getSafi()));
46 builder.setAdvertizedRoutes(new AdvertizedRoutesBuilder()
47 .setDestinationType(Ipv6NlriHandler.parseIpv6ReachNlri(nlri, mPathSupported)).build());
52 public void parseNlri(
54 final MpUnreachNlriBuilder builder,
55 final PeerSpecificParserConstraint constraint) throws BGPParsingException {
56 if (!nlri.isReadable()) {
59 final boolean mPathSupported = MultiPathSupportUtil.isTableTypeSupported(constraint,
60 new BgpTableTypeImpl(builder.getAfi(), builder.getSafi()));
61 builder.setWithdrawnRoutes(new WithdrawnRoutesBuilder()
62 .setDestinationType(Ipv6NlriHandler.parseIpv6UnreachNlri(nlri, mPathSupported)).build());
66 public void serializeAttribute(final Attributes pathAttributes, final ByteBuf byteAggregator) {
67 final AttributesReach pathAttributes1 = pathAttributes.augmentation(AttributesReach.class);
68 final AttributesUnreach pathAttributes2 = pathAttributes.augmentation(AttributesUnreach.class);
69 if (pathAttributes1 != null) {
70 final AdvertizedRoutes routes = pathAttributes1.getMpReachNlri().getAdvertizedRoutes();
71 if (routes != null && routes.getDestinationType() instanceof DestinationMvpnIpv6AdvertizedCase) {
72 final DestinationMvpnIpv6AdvertizedCase reach
73 = (DestinationMvpnIpv6AdvertizedCase) routes.getDestinationType();
74 Ipv6NlriHandler.serializeNlri(reach.getDestinationMvpn().getMvpnDestination(),
77 } else if (pathAttributes2 != null) {
78 final WithdrawnRoutes withdrawnRoutes = pathAttributes2.getMpUnreachNlri().getWithdrawnRoutes();
79 if (withdrawnRoutes != null
80 && withdrawnRoutes.getDestinationType() instanceof DestinationMvpnIpv6WithdrawnCase) {
81 final DestinationMvpnIpv6WithdrawnCase reach
82 = (DestinationMvpnIpv6WithdrawnCase) withdrawnRoutes.getDestinationType();
83 Ipv6NlriHandler.serializeNlri(reach.getDestinationMvpn().getMvpnDestination(),