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
9 package org.opendaylight.protocol.bmp.parser;
11 import java.util.ArrayList;
12 import java.util.List;
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.BmpExtensionProviderContext;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.InitiationMessage;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.PeerDownNotification;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.PeerUpNotification;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.RouteMirroringMessage;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.RouteMonitoringMessage;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.StatsReportsMessage;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.TerminationMessage;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.description.tlv.DescriptionTlv;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.mirror.information.tlv.MirrorInformationTlv;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.name.tlv.NameTlv;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.reason.tlv.ReasonTlv;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.AdjRibsInRoutesTlv;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.DuplicatePrefixAdvertisementsTlv;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.DuplicateUpdatesTlv;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.DuplicateWithdrawsTlv;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.InvalidatedAsConfedLoopTlv;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.InvalidatedAsPathLoopTlv;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.InvalidatedClusterListLoopTlv;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.InvalidatedOriginatorIdTlv;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.LocRibRoutesTlv;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.PerAfiSafiAdjRibInTlv;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.PerAfiSafiLocRibTlv;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.PrefixesTreatedAsWithdrawTlv;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.RejectedPrefixesTlv;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.UpdatesTreatedAsWithdrawTlv;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.string.tlv.StringTlv;
75 * Created by cgasparini on 15.5.2015.
77 public final class BmpActivator extends AbstractBmpExtensionProviderActivator {
79 private final MessageRegistry messageRegistry;
80 private final AddressFamilyRegistry afiRegistry;
81 private final SubsequentAddressFamilyRegistry safiRegistry;
83 public BmpActivator(final BGPExtensionConsumerContext context) {
84 this.messageRegistry = context.getMessageRegistry();
85 this.afiRegistry = context.getAddressFamilyRegistry();
86 this.safiRegistry = context.getSubsequentAddressFamilyRegistry();
90 protected List<AutoCloseable> startImpl(final BmpExtensionProviderContext context) {
91 final List<AutoCloseable> regs = new ArrayList<>();
92 registerBmpTlvHandlers(regs, context);
93 registerBmpStatTlvHandlers(regs, context);
94 registerBmpMessageHandlers(regs, context);
98 private void registerBmpMessageHandlers(final List<AutoCloseable> regs, final BmpExtensionProviderContext context) {
99 final InitiationHandler initiationHandler = new InitiationHandler(context.getBmpInitiationTlvRegistry());
100 regs.add(context.registerBmpMessageParser(initiationHandler.getBmpMessageType(), initiationHandler));
101 regs.add(context.registerBmpMessageSerializer(InitiationMessage.class, initiationHandler));
103 final TerminationHandler terminationHandler = new TerminationHandler(context.getBmpTerminationTlvRegistry());
104 regs.add(context.registerBmpMessageParser(terminationHandler.getBmpMessageType(), terminationHandler));
105 regs.add(context.registerBmpMessageSerializer(TerminationMessage.class, terminationHandler));
107 final PeerUpHandler peerUpHandler = new PeerUpHandler(this.messageRegistry, context.getBmpPeerUpTlvRegistry());
108 regs.add(context.registerBmpMessageParser(peerUpHandler.getBmpMessageType(), peerUpHandler));
109 regs.add(context.registerBmpMessageSerializer(PeerUpNotification.class, peerUpHandler));
111 final PeerDownHandler peerDownHandler = new PeerDownHandler(this.messageRegistry);
112 regs.add(context.registerBmpMessageParser(peerDownHandler.getBmpMessageType(), peerDownHandler));
113 regs.add(context.registerBmpMessageSerializer(PeerDownNotification.class, peerDownHandler));
115 final StatisticsReportHandler statisticsReportHandler = new StatisticsReportHandler(this.messageRegistry,
116 context.getBmpStatisticsTlvRegistry());
117 regs.add(context.registerBmpMessageParser(statisticsReportHandler.getBmpMessageType(),
118 statisticsReportHandler));
119 regs.add(context.registerBmpMessageSerializer(StatsReportsMessage.class, statisticsReportHandler));
121 final RouteMonitoringMessageHandler routeMonitoringMessageHandler =
122 new RouteMonitoringMessageHandler(this.messageRegistry);
123 regs.add(context.registerBmpMessageParser(routeMonitoringMessageHandler.getBmpMessageType(),
124 routeMonitoringMessageHandler));
125 regs.add(context.registerBmpMessageSerializer(RouteMonitoringMessage.class, routeMonitoringMessageHandler));
127 final RouteMirroringMessageHandler routeMirroringMessageHandler =
128 new RouteMirroringMessageHandler(this.messageRegistry, context.getBmpRouteMirroringTlvRegistry());
129 regs.add(context.registerBmpMessageParser(routeMirroringMessageHandler.getBmpMessageType(),
130 routeMirroringMessageHandler));
131 regs.add(context.registerBmpMessageSerializer(RouteMirroringMessage.class, routeMirroringMessageHandler));
135 private static void registerBmpTlvHandlers(final List<AutoCloseable> regs,
136 final BmpExtensionProviderContext context) {
137 final DescriptionTlvHandler descriptionTlvHandler = new DescriptionTlvHandler();
138 regs.add(context.registerBmpInitiationTlvParser(DescriptionTlvHandler.TYPE, descriptionTlvHandler));
139 regs.add(context.registerBmpInitiationTlvSerializer(DescriptionTlv.class, descriptionTlvHandler));
141 final NameTlvHandler nameTlvHandler = new NameTlvHandler();
142 regs.add(context.registerBmpInitiationTlvParser(NameTlvHandler.TYPE, nameTlvHandler));
143 regs.add(context.registerBmpInitiationTlvSerializer(NameTlv.class, nameTlvHandler));
145 final StringTlvHandler stringTlvHandler = new StringTlvHandler();
146 regs.add(context.registerBmpInitiationTlvParser(StringTlvHandler.TYPE, stringTlvHandler));
147 regs.add(context.registerBmpInitiationTlvSerializer(StringTlv.class, stringTlvHandler));
148 regs.add(context.registerBmpTerminationTlvParser(StringTlvHandler.TYPE, stringTlvHandler));
149 regs.add(context.registerBmpTerminationTlvSerializer(StringTlv.class, stringTlvHandler));
150 regs.add(context.registerBmpPeerUpTlvParser(StringTlvHandler.TYPE, stringTlvHandler));
151 regs.add(context.registerBmpPeerUpTlvSerializer(StringTlv.class, stringTlvHandler));
153 final ReasonTlvHandler reasonTlvHandler = new ReasonTlvHandler();
154 regs.add(context.registerBmpTerminationTlvParser(ReasonTlvHandler.TYPE, reasonTlvHandler));
155 regs.add(context.registerBmpTerminationTlvSerializer(ReasonTlv.class, reasonTlvHandler));
157 final MirrorInformationTlvHandler informationTlvHandler = new MirrorInformationTlvHandler();
158 regs.add(context.registerBmpRouteMirroringTlvParser(MirrorInformationTlvHandler.TYPE, informationTlvHandler));
159 regs.add(context.registerBmpRouteMirroringTlvSerializer(MirrorInformationTlv.class, informationTlvHandler));
162 private void registerBmpStatTlvHandlers(final List<AutoCloseable> regs,
163 final BmpExtensionProviderContext context) {
164 final StatType000TlvHandler statType000TlvHandler = new StatType000TlvHandler();
165 regs.add(context.registerBmpStatisticsTlvParser(StatType000TlvHandler.TYPE, statType000TlvHandler));
166 regs.add(context.registerBmpStatisticsTlvSerializer(RejectedPrefixesTlv.class, statType000TlvHandler));
168 final StatType001TlvHandler statType001TlvHandler = new StatType001TlvHandler();
169 regs.add(context.registerBmpStatisticsTlvParser(StatType001TlvHandler.TYPE, statType001TlvHandler));
170 regs.add(context.registerBmpStatisticsTlvSerializer(DuplicatePrefixAdvertisementsTlv.class,
171 statType001TlvHandler));
173 final StatType002TlvHandler statType002TlvHandler = new StatType002TlvHandler();
174 regs.add(context.registerBmpStatisticsTlvParser(StatType002TlvHandler.TYPE, statType002TlvHandler));
175 regs.add(context.registerBmpStatisticsTlvSerializer(DuplicateWithdrawsTlv.class, statType002TlvHandler));
177 final StatType003TlvHandler statType003TlvHandler = new StatType003TlvHandler();
178 regs.add(context.registerBmpStatisticsTlvParser(StatType003TlvHandler.TYPE, statType003TlvHandler));
179 regs.add(context.registerBmpStatisticsTlvSerializer(InvalidatedClusterListLoopTlv.class,
180 statType003TlvHandler));
182 final StatType004TlvHandler statType004TlvHandler = new StatType004TlvHandler();
183 regs.add(context.registerBmpStatisticsTlvParser(StatType004TlvHandler.TYPE, statType004TlvHandler));
184 regs.add(context.registerBmpStatisticsTlvSerializer(InvalidatedAsPathLoopTlv.class, statType004TlvHandler));
186 final StatType005TlvHandler statType005TlvHandler = new StatType005TlvHandler();
187 regs.add(context.registerBmpStatisticsTlvParser(StatType005TlvHandler.TYPE, statType005TlvHandler));
188 regs.add(context.registerBmpStatisticsTlvSerializer(InvalidatedOriginatorIdTlv.class, statType005TlvHandler));
190 final StatType006TlvHandler statType006TlvHandler = new StatType006TlvHandler();
191 regs.add(context.registerBmpStatisticsTlvParser(StatType006TlvHandler.TYPE, statType006TlvHandler));
192 regs.add(context.registerBmpStatisticsTlvSerializer(InvalidatedAsConfedLoopTlv.class, statType006TlvHandler));
194 final StatType007TlvHandler statType007TlvHandler = new StatType007TlvHandler();
195 regs.add(context.registerBmpStatisticsTlvParser(StatType007TlvHandler.TYPE, statType007TlvHandler));
196 regs.add(context.registerBmpStatisticsTlvSerializer(AdjRibsInRoutesTlv.class, statType007TlvHandler));
198 final StatType008TlvHandler statType008TlvHandler = new StatType008TlvHandler();
199 regs.add(context.registerBmpStatisticsTlvParser(StatType008TlvHandler.TYPE, statType008TlvHandler));
200 regs.add(context.registerBmpStatisticsTlvSerializer(LocRibRoutesTlv.class, statType008TlvHandler));
202 final StatType009TlvHandler statType009TlvHandler =
203 new StatType009TlvHandler(this.afiRegistry, this.safiRegistry);
204 regs.add(context.registerBmpStatisticsTlvParser(StatType009TlvHandler.TYPE, statType009TlvHandler));
205 regs.add(context.registerBmpStatisticsTlvSerializer(PerAfiSafiAdjRibInTlv.class, statType009TlvHandler));
207 final StatType010TlvHandler statType010TlvHandler =
208 new StatType010TlvHandler(this.afiRegistry, this.safiRegistry);
209 regs.add(context.registerBmpStatisticsTlvParser(StatType010TlvHandler.TYPE, statType010TlvHandler));
210 regs.add(context.registerBmpStatisticsTlvSerializer(PerAfiSafiLocRibTlv.class, statType010TlvHandler));
212 final StatType011TlvHandler statType011TlvHandler = new StatType011TlvHandler();
213 regs.add(context.registerBmpStatisticsTlvParser(StatType011TlvHandler.TYPE, statType011TlvHandler));
214 regs.add(context.registerBmpStatisticsTlvSerializer(UpdatesTreatedAsWithdrawTlv.class, statType011TlvHandler));
216 final StatType012TlvHandler statType012TlvHandler = new StatType012TlvHandler();
217 regs.add(context.registerBmpStatisticsTlvParser(StatType012TlvHandler.TYPE, statType012TlvHandler));
218 regs.add(context.registerBmpStatisticsTlvSerializer(PrefixesTreatedAsWithdrawTlv.class, statType012TlvHandler));
220 final StatType013TlvHandler statType013TlvHandler = new StatType013TlvHandler();
221 regs.add(context.registerBmpStatisticsTlvParser(StatType013TlvHandler.TYPE, statType013TlvHandler));
222 regs.add(context.registerBmpStatisticsTlvSerializer(DuplicateUpdatesTlv.class, statType013TlvHandler));