2 * Copyright (c) 2015 Cisco Systems, Inc. and others. 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.bmp.parser;
10 import java.util.ArrayList;
11 import java.util.List;
12 import org.kohsuke.MetaInfServices;
13 import org.opendaylight.protocol.bgp.parser.spi.AddressFamilyRegistry;
14 import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionConsumerContext;
15 import org.opendaylight.protocol.bgp.parser.spi.MessageRegistry;
16 import org.opendaylight.protocol.bgp.parser.spi.SubsequentAddressFamilyRegistry;
17 import org.opendaylight.protocol.bmp.parser.message.InitiationHandler;
18 import org.opendaylight.protocol.bmp.parser.message.PeerDownHandler;
19 import org.opendaylight.protocol.bmp.parser.message.PeerUpHandler;
20 import org.opendaylight.protocol.bmp.parser.message.RouteMirroringMessageHandler;
21 import org.opendaylight.protocol.bmp.parser.message.RouteMonitoringMessageHandler;
22 import org.opendaylight.protocol.bmp.parser.message.StatisticsReportHandler;
23 import org.opendaylight.protocol.bmp.parser.message.TerminationHandler;
24 import org.opendaylight.protocol.bmp.parser.tlv.DescriptionTlvHandler;
25 import org.opendaylight.protocol.bmp.parser.tlv.MirrorInformationTlvHandler;
26 import org.opendaylight.protocol.bmp.parser.tlv.NameTlvHandler;
27 import org.opendaylight.protocol.bmp.parser.tlv.ReasonTlvHandler;
28 import org.opendaylight.protocol.bmp.parser.tlv.StatType000TlvHandler;
29 import org.opendaylight.protocol.bmp.parser.tlv.StatType001TlvHandler;
30 import org.opendaylight.protocol.bmp.parser.tlv.StatType002TlvHandler;
31 import org.opendaylight.protocol.bmp.parser.tlv.StatType003TlvHandler;
32 import org.opendaylight.protocol.bmp.parser.tlv.StatType004TlvHandler;
33 import org.opendaylight.protocol.bmp.parser.tlv.StatType005TlvHandler;
34 import org.opendaylight.protocol.bmp.parser.tlv.StatType006TlvHandler;
35 import org.opendaylight.protocol.bmp.parser.tlv.StatType007TlvHandler;
36 import org.opendaylight.protocol.bmp.parser.tlv.StatType008TlvHandler;
37 import org.opendaylight.protocol.bmp.parser.tlv.StatType009TlvHandler;
38 import org.opendaylight.protocol.bmp.parser.tlv.StatType010TlvHandler;
39 import org.opendaylight.protocol.bmp.parser.tlv.StatType011TlvHandler;
40 import org.opendaylight.protocol.bmp.parser.tlv.StatType012TlvHandler;
41 import org.opendaylight.protocol.bmp.parser.tlv.StatType013TlvHandler;
42 import org.opendaylight.protocol.bmp.parser.tlv.StringTlvHandler;
43 import org.opendaylight.protocol.bmp.spi.registry.AbstractBmpExtensionProviderActivator;
44 import org.opendaylight.protocol.bmp.spi.registry.BmpExtensionProviderActivator;
45 import org.opendaylight.protocol.bmp.spi.registry.BmpExtensionProviderContext;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.InitiationMessage;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.PeerDownNotification;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.PeerUpNotification;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.RouteMirroringMessage;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.RouteMonitoringMessage;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.StatsReportsMessage;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.TerminationMessage;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.description.tlv.DescriptionTlv;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.mirror.information.tlv.MirrorInformationTlv;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.name.tlv.NameTlv;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.reason.tlv.ReasonTlv;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.AdjRibsInRoutesTlv;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.DuplicatePrefixAdvertisementsTlv;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.DuplicateUpdatesTlv;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.DuplicateWithdrawsTlv;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.InvalidatedAsConfedLoopTlv;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.InvalidatedAsPathLoopTlv;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.InvalidatedClusterListLoopTlv;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.InvalidatedOriginatorIdTlv;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.LocRibRoutesTlv;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.PerAfiSafiAdjRibInTlv;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.PerAfiSafiLocRibTlv;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.PrefixesTreatedAsWithdrawTlv;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.RejectedPrefixesTlv;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.UpdatesTreatedAsWithdrawTlv;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.string.tlv.StringTlv;
73 @MetaInfServices(value = BmpExtensionProviderActivator.class)
74 public final class BmpActivator extends AbstractBmpExtensionProviderActivator {
75 private final MessageRegistry messageRegistry;
76 private final AddressFamilyRegistry afiRegistry;
77 private final SubsequentAddressFamilyRegistry safiRegistry;
79 // FIXME: this needs to be properly injected
80 public BmpActivator(final BGPExtensionConsumerContext context) {
81 this.messageRegistry = context.getMessageRegistry();
82 this.afiRegistry = context.getAddressFamilyRegistry();
83 this.safiRegistry = context.getSubsequentAddressFamilyRegistry();
87 protected List<AutoCloseable> startImpl(final BmpExtensionProviderContext context) {
88 final List<AutoCloseable> regs = new ArrayList<>();
89 registerBmpTlvHandlers(regs, context);
90 registerBmpStatTlvHandlers(regs, context);
91 registerBmpMessageHandlers(regs, context);
95 private void registerBmpMessageHandlers(final List<AutoCloseable> regs, final BmpExtensionProviderContext context) {
96 final InitiationHandler initiationHandler = new InitiationHandler(context.getBmpInitiationTlvRegistry());
97 regs.add(context.registerBmpMessageParser(initiationHandler.getBmpMessageType(), initiationHandler));
98 regs.add(context.registerBmpMessageSerializer(InitiationMessage.class, initiationHandler));
100 final TerminationHandler terminationHandler = new TerminationHandler(context.getBmpTerminationTlvRegistry());
101 regs.add(context.registerBmpMessageParser(terminationHandler.getBmpMessageType(), terminationHandler));
102 regs.add(context.registerBmpMessageSerializer(TerminationMessage.class, terminationHandler));
104 final PeerUpHandler peerUpHandler = new PeerUpHandler(this.messageRegistry, context.getBmpPeerUpTlvRegistry());
105 regs.add(context.registerBmpMessageParser(peerUpHandler.getBmpMessageType(), peerUpHandler));
106 regs.add(context.registerBmpMessageSerializer(PeerUpNotification.class, peerUpHandler));
108 final PeerDownHandler peerDownHandler = new PeerDownHandler(this.messageRegistry);
109 regs.add(context.registerBmpMessageParser(peerDownHandler.getBmpMessageType(), peerDownHandler));
110 regs.add(context.registerBmpMessageSerializer(PeerDownNotification.class, peerDownHandler));
112 final StatisticsReportHandler statisticsReportHandler = new StatisticsReportHandler(this.messageRegistry,
113 context.getBmpStatisticsTlvRegistry());
114 regs.add(context.registerBmpMessageParser(statisticsReportHandler.getBmpMessageType(),
115 statisticsReportHandler));
116 regs.add(context.registerBmpMessageSerializer(StatsReportsMessage.class, statisticsReportHandler));
118 final RouteMonitoringMessageHandler routeMonitoringMessageHandler =
119 new RouteMonitoringMessageHandler(this.messageRegistry);
120 regs.add(context.registerBmpMessageParser(routeMonitoringMessageHandler.getBmpMessageType(),
121 routeMonitoringMessageHandler));
122 regs.add(context.registerBmpMessageSerializer(RouteMonitoringMessage.class, routeMonitoringMessageHandler));
124 final RouteMirroringMessageHandler routeMirroringMessageHandler =
125 new RouteMirroringMessageHandler(this.messageRegistry, context.getBmpRouteMirroringTlvRegistry());
126 regs.add(context.registerBmpMessageParser(routeMirroringMessageHandler.getBmpMessageType(),
127 routeMirroringMessageHandler));
128 regs.add(context.registerBmpMessageSerializer(RouteMirroringMessage.class, routeMirroringMessageHandler));
132 private static void registerBmpTlvHandlers(final List<AutoCloseable> regs,
133 final BmpExtensionProviderContext context) {
134 final DescriptionTlvHandler descriptionTlvHandler = new DescriptionTlvHandler();
135 regs.add(context.registerBmpInitiationTlvParser(DescriptionTlvHandler.TYPE, descriptionTlvHandler));
136 regs.add(context.registerBmpInitiationTlvSerializer(DescriptionTlv.class, descriptionTlvHandler));
138 final NameTlvHandler nameTlvHandler = new NameTlvHandler();
139 regs.add(context.registerBmpInitiationTlvParser(NameTlvHandler.TYPE, nameTlvHandler));
140 regs.add(context.registerBmpInitiationTlvSerializer(NameTlv.class, nameTlvHandler));
142 final StringTlvHandler stringTlvHandler = new StringTlvHandler();
143 regs.add(context.registerBmpInitiationTlvParser(StringTlvHandler.TYPE, stringTlvHandler));
144 regs.add(context.registerBmpInitiationTlvSerializer(StringTlv.class, stringTlvHandler));
145 regs.add(context.registerBmpTerminationTlvParser(StringTlvHandler.TYPE, stringTlvHandler));
146 regs.add(context.registerBmpTerminationTlvSerializer(StringTlv.class, stringTlvHandler));
147 regs.add(context.registerBmpPeerUpTlvParser(StringTlvHandler.TYPE, stringTlvHandler));
148 regs.add(context.registerBmpPeerUpTlvSerializer(StringTlv.class, stringTlvHandler));
150 final ReasonTlvHandler reasonTlvHandler = new ReasonTlvHandler();
151 regs.add(context.registerBmpTerminationTlvParser(ReasonTlvHandler.TYPE, reasonTlvHandler));
152 regs.add(context.registerBmpTerminationTlvSerializer(ReasonTlv.class, reasonTlvHandler));
154 final MirrorInformationTlvHandler informationTlvHandler = new MirrorInformationTlvHandler();
155 regs.add(context.registerBmpRouteMirroringTlvParser(MirrorInformationTlvHandler.TYPE, informationTlvHandler));
156 regs.add(context.registerBmpRouteMirroringTlvSerializer(MirrorInformationTlv.class, informationTlvHandler));
159 private void registerBmpStatTlvHandlers(final List<AutoCloseable> regs,
160 final BmpExtensionProviderContext context) {
161 final StatType000TlvHandler statType000TlvHandler = new StatType000TlvHandler();
162 regs.add(context.registerBmpStatisticsTlvParser(StatType000TlvHandler.TYPE, statType000TlvHandler));
163 regs.add(context.registerBmpStatisticsTlvSerializer(RejectedPrefixesTlv.class, statType000TlvHandler));
165 final StatType001TlvHandler statType001TlvHandler = new StatType001TlvHandler();
166 regs.add(context.registerBmpStatisticsTlvParser(StatType001TlvHandler.TYPE, statType001TlvHandler));
167 regs.add(context.registerBmpStatisticsTlvSerializer(DuplicatePrefixAdvertisementsTlv.class,
168 statType001TlvHandler));
170 final StatType002TlvHandler statType002TlvHandler = new StatType002TlvHandler();
171 regs.add(context.registerBmpStatisticsTlvParser(StatType002TlvHandler.TYPE, statType002TlvHandler));
172 regs.add(context.registerBmpStatisticsTlvSerializer(DuplicateWithdrawsTlv.class, statType002TlvHandler));
174 final StatType003TlvHandler statType003TlvHandler = new StatType003TlvHandler();
175 regs.add(context.registerBmpStatisticsTlvParser(StatType003TlvHandler.TYPE, statType003TlvHandler));
176 regs.add(context.registerBmpStatisticsTlvSerializer(InvalidatedClusterListLoopTlv.class,
177 statType003TlvHandler));
179 final StatType004TlvHandler statType004TlvHandler = new StatType004TlvHandler();
180 regs.add(context.registerBmpStatisticsTlvParser(StatType004TlvHandler.TYPE, statType004TlvHandler));
181 regs.add(context.registerBmpStatisticsTlvSerializer(InvalidatedAsPathLoopTlv.class, statType004TlvHandler));
183 final StatType005TlvHandler statType005TlvHandler = new StatType005TlvHandler();
184 regs.add(context.registerBmpStatisticsTlvParser(StatType005TlvHandler.TYPE, statType005TlvHandler));
185 regs.add(context.registerBmpStatisticsTlvSerializer(InvalidatedOriginatorIdTlv.class, statType005TlvHandler));
187 final StatType006TlvHandler statType006TlvHandler = new StatType006TlvHandler();
188 regs.add(context.registerBmpStatisticsTlvParser(StatType006TlvHandler.TYPE, statType006TlvHandler));
189 regs.add(context.registerBmpStatisticsTlvSerializer(InvalidatedAsConfedLoopTlv.class, statType006TlvHandler));
191 final StatType007TlvHandler statType007TlvHandler = new StatType007TlvHandler();
192 regs.add(context.registerBmpStatisticsTlvParser(StatType007TlvHandler.TYPE, statType007TlvHandler));
193 regs.add(context.registerBmpStatisticsTlvSerializer(AdjRibsInRoutesTlv.class, statType007TlvHandler));
195 final StatType008TlvHandler statType008TlvHandler = new StatType008TlvHandler();
196 regs.add(context.registerBmpStatisticsTlvParser(StatType008TlvHandler.TYPE, statType008TlvHandler));
197 regs.add(context.registerBmpStatisticsTlvSerializer(LocRibRoutesTlv.class, statType008TlvHandler));
199 final StatType009TlvHandler statType009TlvHandler =
200 new StatType009TlvHandler(this.afiRegistry, this.safiRegistry);
201 regs.add(context.registerBmpStatisticsTlvParser(StatType009TlvHandler.TYPE, statType009TlvHandler));
202 regs.add(context.registerBmpStatisticsTlvSerializer(PerAfiSafiAdjRibInTlv.class, statType009TlvHandler));
204 final StatType010TlvHandler statType010TlvHandler =
205 new StatType010TlvHandler(this.afiRegistry, this.safiRegistry);
206 regs.add(context.registerBmpStatisticsTlvParser(StatType010TlvHandler.TYPE, statType010TlvHandler));
207 regs.add(context.registerBmpStatisticsTlvSerializer(PerAfiSafiLocRibTlv.class, statType010TlvHandler));
209 final StatType011TlvHandler statType011TlvHandler = new StatType011TlvHandler();
210 regs.add(context.registerBmpStatisticsTlvParser(StatType011TlvHandler.TYPE, statType011TlvHandler));
211 regs.add(context.registerBmpStatisticsTlvSerializer(UpdatesTreatedAsWithdrawTlv.class, statType011TlvHandler));
213 final StatType012TlvHandler statType012TlvHandler = new StatType012TlvHandler();
214 regs.add(context.registerBmpStatisticsTlvParser(StatType012TlvHandler.TYPE, statType012TlvHandler));
215 regs.add(context.registerBmpStatisticsTlvSerializer(PrefixesTreatedAsWithdrawTlv.class, statType012TlvHandler));
217 final StatType013TlvHandler statType013TlvHandler = new StatType013TlvHandler();
218 regs.add(context.registerBmpStatisticsTlvParser(StatType013TlvHandler.TYPE, statType013TlvHandler));
219 regs.add(context.registerBmpStatisticsTlvSerializer(DuplicateUpdatesTlv.class, statType013TlvHandler));