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.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;
77 @Component(immediate = true, property = "type=org.opendaylight.protocol.bmp.parser.BmpActivator")
80 public final class BmpActivator implements BmpExtensionProviderActivator {
81 private final MessageRegistry messageRegistry;
82 private final AddressFamilyRegistry afiRegistry;
83 private final SubsequentAddressFamilyRegistry safiRegistry;
87 public BmpActivator(final @Reference BGPExtensionConsumerContext context) {
88 this.messageRegistry = context.getMessageRegistry();
89 this.afiRegistry = context.getAddressFamilyRegistry();
90 this.safiRegistry = context.getSubsequentAddressFamilyRegistry();
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();
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);
128 // FIXME: Convert to proper whiteboard pattern
130 context.registerBmpInitiationTlvParser(DescriptionTlvHandler.TYPE, descriptionTlvHandler),
131 context.registerBmpInitiationTlvSerializer(DescriptionTlv.class, descriptionTlvHandler),
132 context.registerBmpInitiationTlvParser(NameTlvHandler.TYPE, nameTlvHandler),
133 context.registerBmpInitiationTlvSerializer(NameTlv.class, nameTlvHandler),
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),
142 context.registerBmpTerminationTlvParser(ReasonTlvHandler.TYPE, reasonTlvHandler),
143 context.registerBmpTerminationTlvSerializer(ReasonTlv.class, reasonTlvHandler),
145 context.registerBmpRouteMirroringTlvParser(MirrorInformationTlvHandler.TYPE, informationTlvHandler),
146 context.registerBmpRouteMirroringTlvSerializer(MirrorInformationTlv.class, informationTlvHandler),
148 context.registerBmpStatisticsTlvParser(StatType000TlvHandler.TYPE, statType000TlvHandler),
149 context.registerBmpStatisticsTlvSerializer(RejectedPrefixesTlv.class, statType000TlvHandler),
151 context.registerBmpStatisticsTlvParser(StatType001TlvHandler.TYPE, statType001TlvHandler),
152 context.registerBmpStatisticsTlvSerializer(DuplicatePrefixAdvertisementsTlv.class, statType001TlvHandler),
154 context.registerBmpStatisticsTlvParser(StatType002TlvHandler.TYPE, statType002TlvHandler),
155 context.registerBmpStatisticsTlvSerializer(DuplicateWithdrawsTlv.class, statType002TlvHandler),
157 context.registerBmpStatisticsTlvParser(StatType003TlvHandler.TYPE, statType003TlvHandler),
158 context.registerBmpStatisticsTlvSerializer(InvalidatedClusterListLoopTlv.class, statType003TlvHandler),
160 context.registerBmpStatisticsTlvParser(StatType004TlvHandler.TYPE, statType004TlvHandler),
161 context.registerBmpStatisticsTlvSerializer(InvalidatedAsPathLoopTlv.class, statType004TlvHandler),
163 context.registerBmpStatisticsTlvParser(StatType005TlvHandler.TYPE, statType005TlvHandler),
164 context.registerBmpStatisticsTlvSerializer(InvalidatedOriginatorIdTlv.class, statType005TlvHandler),
166 context.registerBmpStatisticsTlvParser(StatType006TlvHandler.TYPE, statType006TlvHandler),
167 context.registerBmpStatisticsTlvSerializer(InvalidatedAsConfedLoopTlv.class, statType006TlvHandler),
169 context.registerBmpStatisticsTlvParser(StatType007TlvHandler.TYPE, statType007TlvHandler),
170 context.registerBmpStatisticsTlvSerializer(AdjRibsInRoutesTlv.class, statType007TlvHandler),
172 context.registerBmpStatisticsTlvParser(StatType008TlvHandler.TYPE, statType008TlvHandler),
173 context.registerBmpStatisticsTlvSerializer(LocRibRoutesTlv.class, statType008TlvHandler),
175 context.registerBmpStatisticsTlvParser(StatType009TlvHandler.TYPE, statType009TlvHandler),
176 context.registerBmpStatisticsTlvSerializer(PerAfiSafiAdjRibInTlv.class, statType009TlvHandler),
178 context.registerBmpStatisticsTlvParser(StatType010TlvHandler.TYPE, statType010TlvHandler),
179 context.registerBmpStatisticsTlvSerializer(PerAfiSafiLocRibTlv.class, statType010TlvHandler),
181 context.registerBmpStatisticsTlvParser(StatType011TlvHandler.TYPE, statType011TlvHandler),
182 context.registerBmpStatisticsTlvSerializer(UpdatesTreatedAsWithdrawTlv.class, statType011TlvHandler),
184 context.registerBmpStatisticsTlvParser(StatType012TlvHandler.TYPE, statType012TlvHandler),
185 context.registerBmpStatisticsTlvSerializer(PrefixesTreatedAsWithdrawTlv.class, statType012TlvHandler),
187 context.registerBmpStatisticsTlvParser(StatType013TlvHandler.TYPE, statType013TlvHandler),
188 context.registerBmpStatisticsTlvSerializer(DuplicateUpdatesTlv.class, statType013TlvHandler),
191 context.registerBmpMessageParser(initiationHandler.getBmpMessageType(), initiationHandler),
192 context.registerBmpMessageSerializer(InitiationMessage.class, initiationHandler),
194 context.registerBmpMessageParser(terminationHandler.getBmpMessageType(), terminationHandler),
195 context.registerBmpMessageSerializer(TerminationMessage.class, terminationHandler),
197 context.registerBmpMessageParser(peerUpHandler.getBmpMessageType(), peerUpHandler),
198 context.registerBmpMessageSerializer(PeerUpNotification.class, peerUpHandler),
200 context.registerBmpMessageParser(peerDownHandler.getBmpMessageType(), peerDownHandler),
201 context.registerBmpMessageSerializer(PeerDownNotification.class, peerDownHandler),
203 context.registerBmpMessageParser(statisticsReportHandler.getBmpMessageType(),
204 statisticsReportHandler),
205 context.registerBmpMessageSerializer(StatsReportsMessage.class, statisticsReportHandler),
207 context.registerBmpMessageParser(routeMonitoringMessageHandler.getBmpMessageType(),
208 routeMonitoringMessageHandler),
209 context.registerBmpMessageSerializer(RouteMonitoringMessage.class, routeMonitoringMessageHandler),
211 context.registerBmpMessageParser(routeMirroringMessageHandler.getBmpMessageType(),
212 routeMirroringMessageHandler),
213 context.registerBmpMessageSerializer(RouteMirroringMessage.class, routeMirroringMessageHandler)