Bump versions to 0.21.6-SNAPSHOT
[bgpcep.git] / bmp / bmp-parser-impl / src / main / java / org / opendaylight / protocol / bmp / parser / BmpActivator.java
1 /*
2  * Copyright (c) 2015 Cisco Systems, Inc. and others.  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.bmp.parser;
9
10 import java.util.List;
11 import javax.inject.Inject;
12 import javax.inject.Singleton;
13 import org.kohsuke.MetaInfServices;
14 import org.opendaylight.protocol.bgp.parser.spi.AddressFamilyRegistry;
15 import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionConsumerContext;
16 import org.opendaylight.protocol.bgp.parser.spi.MessageRegistry;
17 import org.opendaylight.protocol.bgp.parser.spi.SubsequentAddressFamilyRegistry;
18 import org.opendaylight.protocol.bmp.parser.message.InitiationHandler;
19 import org.opendaylight.protocol.bmp.parser.message.PeerDownHandler;
20 import org.opendaylight.protocol.bmp.parser.message.PeerUpHandler;
21 import org.opendaylight.protocol.bmp.parser.message.RouteMirroringMessageHandler;
22 import org.opendaylight.protocol.bmp.parser.message.RouteMonitoringMessageHandler;
23 import org.opendaylight.protocol.bmp.parser.message.StatisticsReportHandler;
24 import org.opendaylight.protocol.bmp.parser.message.TerminationHandler;
25 import org.opendaylight.protocol.bmp.parser.tlv.DescriptionTlvHandler;
26 import org.opendaylight.protocol.bmp.parser.tlv.MirrorInformationTlvHandler;
27 import org.opendaylight.protocol.bmp.parser.tlv.NameTlvHandler;
28 import org.opendaylight.protocol.bmp.parser.tlv.ReasonTlvHandler;
29 import org.opendaylight.protocol.bmp.parser.tlv.StatType000TlvHandler;
30 import org.opendaylight.protocol.bmp.parser.tlv.StatType001TlvHandler;
31 import org.opendaylight.protocol.bmp.parser.tlv.StatType002TlvHandler;
32 import org.opendaylight.protocol.bmp.parser.tlv.StatType003TlvHandler;
33 import org.opendaylight.protocol.bmp.parser.tlv.StatType004TlvHandler;
34 import org.opendaylight.protocol.bmp.parser.tlv.StatType005TlvHandler;
35 import org.opendaylight.protocol.bmp.parser.tlv.StatType006TlvHandler;
36 import org.opendaylight.protocol.bmp.parser.tlv.StatType007TlvHandler;
37 import org.opendaylight.protocol.bmp.parser.tlv.StatType008TlvHandler;
38 import org.opendaylight.protocol.bmp.parser.tlv.StatType009TlvHandler;
39 import org.opendaylight.protocol.bmp.parser.tlv.StatType010TlvHandler;
40 import org.opendaylight.protocol.bmp.parser.tlv.StatType011TlvHandler;
41 import org.opendaylight.protocol.bmp.parser.tlv.StatType012TlvHandler;
42 import org.opendaylight.protocol.bmp.parser.tlv.StatType013TlvHandler;
43 import org.opendaylight.protocol.bmp.parser.tlv.StringTlvHandler;
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;
72 import org.opendaylight.yangtools.concepts.Registration;
73 import org.osgi.service.component.annotations.Activate;
74 import org.osgi.service.component.annotations.Component;
75 import org.osgi.service.component.annotations.Reference;
76
77 @Component(immediate = true, property = "type=org.opendaylight.protocol.bmp.parser.BmpActivator")
78 @MetaInfServices
79 @Singleton
80 public final class BmpActivator implements BmpExtensionProviderActivator {
81     private final MessageRegistry messageRegistry;
82     private final AddressFamilyRegistry afiRegistry;
83     private final SubsequentAddressFamilyRegistry safiRegistry;
84
85     @Inject
86     @Activate
87     public BmpActivator(final @Reference BGPExtensionConsumerContext context) {
88         this.messageRegistry = context.getMessageRegistry();
89         this.afiRegistry = context.getAddressFamilyRegistry();
90         this.safiRegistry = context.getSubsequentAddressFamilyRegistry();
91     }
92
93     @Override
94     public List<Registration> start(final BmpExtensionProviderContext context) {
95         final DescriptionTlvHandler descriptionTlvHandler = new DescriptionTlvHandler();
96         final NameTlvHandler nameTlvHandler = new NameTlvHandler();
97         final StringTlvHandler stringTlvHandler = new StringTlvHandler();
98         final ReasonTlvHandler reasonTlvHandler = new ReasonTlvHandler();
99         final MirrorInformationTlvHandler informationTlvHandler = new MirrorInformationTlvHandler();
100         final StatType000TlvHandler statType000TlvHandler = new StatType000TlvHandler();
101         final StatType001TlvHandler statType001TlvHandler = new StatType001TlvHandler();
102         final StatType002TlvHandler statType002TlvHandler = new StatType002TlvHandler();
103         final StatType003TlvHandler statType003TlvHandler = new StatType003TlvHandler();
104         final StatType004TlvHandler statType004TlvHandler = new StatType004TlvHandler();
105         final StatType005TlvHandler statType005TlvHandler = new StatType005TlvHandler();
106         final StatType006TlvHandler statType006TlvHandler = new StatType006TlvHandler();
107         final StatType007TlvHandler statType007TlvHandler = new StatType007TlvHandler();
108         final StatType008TlvHandler statType008TlvHandler = new StatType008TlvHandler();
109         final StatType009TlvHandler statType009TlvHandler =
110             new StatType009TlvHandler(this.afiRegistry, this.safiRegistry);
111         final StatType010TlvHandler statType010TlvHandler =
112             new StatType010TlvHandler(this.afiRegistry, this.safiRegistry);
113         final StatType011TlvHandler statType011TlvHandler = new StatType011TlvHandler();
114         final StatType012TlvHandler statType012TlvHandler = new StatType012TlvHandler();
115         final StatType013TlvHandler statType013TlvHandler = new StatType013TlvHandler();
116
117         final InitiationHandler initiationHandler = new InitiationHandler(context.getBmpInitiationTlvRegistry());
118         final TerminationHandler terminationHandler = new TerminationHandler(context.getBmpTerminationTlvRegistry());
119         final PeerUpHandler peerUpHandler = new PeerUpHandler(this.messageRegistry, context.getBmpPeerUpTlvRegistry());
120         final PeerDownHandler peerDownHandler = new PeerDownHandler(this.messageRegistry);
121         final RouteMirroringMessageHandler routeMirroringMessageHandler =
122             new RouteMirroringMessageHandler(this.messageRegistry, context.getBmpRouteMirroringTlvRegistry());
123         final StatisticsReportHandler statisticsReportHandler = new StatisticsReportHandler(this.messageRegistry,
124             context.getBmpStatisticsTlvRegistry());
125         final RouteMonitoringMessageHandler routeMonitoringMessageHandler =
126             new RouteMonitoringMessageHandler(this.messageRegistry);
127
128         // FIXME: Convert to proper whiteboard pattern
129         return List.of(
130             context.registerBmpInitiationTlvParser(DescriptionTlvHandler.TYPE, descriptionTlvHandler),
131             context.registerBmpInitiationTlvSerializer(DescriptionTlv.class, descriptionTlvHandler),
132             context.registerBmpInitiationTlvParser(NameTlvHandler.TYPE, nameTlvHandler),
133             context.registerBmpInitiationTlvSerializer(NameTlv.class, nameTlvHandler),
134
135             context.registerBmpInitiationTlvParser(StringTlvHandler.TYPE, stringTlvHandler),
136             context.registerBmpInitiationTlvSerializer(StringTlv.class, stringTlvHandler),
137             context.registerBmpTerminationTlvParser(StringTlvHandler.TYPE, stringTlvHandler),
138             context.registerBmpTerminationTlvSerializer(StringTlv.class, stringTlvHandler),
139             context.registerBmpPeerUpTlvParser(StringTlvHandler.TYPE, stringTlvHandler),
140             context.registerBmpPeerUpTlvSerializer(StringTlv.class, stringTlvHandler),
141
142             context.registerBmpTerminationTlvParser(ReasonTlvHandler.TYPE, reasonTlvHandler),
143             context.registerBmpTerminationTlvSerializer(ReasonTlv.class, reasonTlvHandler),
144
145             context.registerBmpRouteMirroringTlvParser(MirrorInformationTlvHandler.TYPE, informationTlvHandler),
146             context.registerBmpRouteMirroringTlvSerializer(MirrorInformationTlv.class, informationTlvHandler),
147
148             context.registerBmpStatisticsTlvParser(StatType000TlvHandler.TYPE, statType000TlvHandler),
149             context.registerBmpStatisticsTlvSerializer(RejectedPrefixesTlv.class, statType000TlvHandler),
150
151             context.registerBmpStatisticsTlvParser(StatType001TlvHandler.TYPE, statType001TlvHandler),
152             context.registerBmpStatisticsTlvSerializer(DuplicatePrefixAdvertisementsTlv.class, statType001TlvHandler),
153
154             context.registerBmpStatisticsTlvParser(StatType002TlvHandler.TYPE, statType002TlvHandler),
155             context.registerBmpStatisticsTlvSerializer(DuplicateWithdrawsTlv.class, statType002TlvHandler),
156
157             context.registerBmpStatisticsTlvParser(StatType003TlvHandler.TYPE, statType003TlvHandler),
158             context.registerBmpStatisticsTlvSerializer(InvalidatedClusterListLoopTlv.class, statType003TlvHandler),
159
160             context.registerBmpStatisticsTlvParser(StatType004TlvHandler.TYPE, statType004TlvHandler),
161             context.registerBmpStatisticsTlvSerializer(InvalidatedAsPathLoopTlv.class, statType004TlvHandler),
162
163             context.registerBmpStatisticsTlvParser(StatType005TlvHandler.TYPE, statType005TlvHandler),
164             context.registerBmpStatisticsTlvSerializer(InvalidatedOriginatorIdTlv.class, statType005TlvHandler),
165
166             context.registerBmpStatisticsTlvParser(StatType006TlvHandler.TYPE, statType006TlvHandler),
167             context.registerBmpStatisticsTlvSerializer(InvalidatedAsConfedLoopTlv.class, statType006TlvHandler),
168
169             context.registerBmpStatisticsTlvParser(StatType007TlvHandler.TYPE, statType007TlvHandler),
170             context.registerBmpStatisticsTlvSerializer(AdjRibsInRoutesTlv.class, statType007TlvHandler),
171
172             context.registerBmpStatisticsTlvParser(StatType008TlvHandler.TYPE, statType008TlvHandler),
173             context.registerBmpStatisticsTlvSerializer(LocRibRoutesTlv.class, statType008TlvHandler),
174
175             context.registerBmpStatisticsTlvParser(StatType009TlvHandler.TYPE, statType009TlvHandler),
176             context.registerBmpStatisticsTlvSerializer(PerAfiSafiAdjRibInTlv.class, statType009TlvHandler),
177
178             context.registerBmpStatisticsTlvParser(StatType010TlvHandler.TYPE, statType010TlvHandler),
179             context.registerBmpStatisticsTlvSerializer(PerAfiSafiLocRibTlv.class, statType010TlvHandler),
180
181             context.registerBmpStatisticsTlvParser(StatType011TlvHandler.TYPE, statType011TlvHandler),
182             context.registerBmpStatisticsTlvSerializer(UpdatesTreatedAsWithdrawTlv.class, statType011TlvHandler),
183
184             context.registerBmpStatisticsTlvParser(StatType012TlvHandler.TYPE, statType012TlvHandler),
185             context.registerBmpStatisticsTlvSerializer(PrefixesTreatedAsWithdrawTlv.class, statType012TlvHandler),
186
187             context.registerBmpStatisticsTlvParser(StatType013TlvHandler.TYPE, statType013TlvHandler),
188             context.registerBmpStatisticsTlvSerializer(DuplicateUpdatesTlv.class, statType013TlvHandler),
189
190
191             context.registerBmpMessageParser(initiationHandler.getBmpMessageType(), initiationHandler),
192             context.registerBmpMessageSerializer(InitiationMessage.class, initiationHandler),
193
194             context.registerBmpMessageParser(terminationHandler.getBmpMessageType(), terminationHandler),
195             context.registerBmpMessageSerializer(TerminationMessage.class, terminationHandler),
196
197             context.registerBmpMessageParser(peerUpHandler.getBmpMessageType(), peerUpHandler),
198             context.registerBmpMessageSerializer(PeerUpNotification.class, peerUpHandler),
199
200             context.registerBmpMessageParser(peerDownHandler.getBmpMessageType(), peerDownHandler),
201             context.registerBmpMessageSerializer(PeerDownNotification.class, peerDownHandler),
202
203             context.registerBmpMessageParser(statisticsReportHandler.getBmpMessageType(),
204                 statisticsReportHandler),
205             context.registerBmpMessageSerializer(StatsReportsMessage.class, statisticsReportHandler),
206
207             context.registerBmpMessageParser(routeMonitoringMessageHandler.getBmpMessageType(),
208                 routeMonitoringMessageHandler),
209             context.registerBmpMessageSerializer(RouteMonitoringMessage.class, routeMonitoringMessageHandler),
210
211             context.registerBmpMessageParser(routeMirroringMessageHandler.getBmpMessageType(),
212                 routeMirroringMessageHandler),
213             context.registerBmpMessageSerializer(RouteMirroringMessage.class, routeMirroringMessageHandler)
214             );
215     }
216 }