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.rev150512.InitiationMessage;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.PeerDownNotification;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.PeerUpNotification;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.RouteMirroringMessage;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.RouteMonitoringMessage;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.StatsReportsMessage;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.TerminationMessage;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.description.tlv.DescriptionTlv;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.mirror.information.tlv.MirrorInformationTlv;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.name.tlv.NameTlv;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.reason.tlv.ReasonTlv;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.stat.tlvs.AdjRibsInRoutesTlv;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.stat.tlvs.DuplicatePrefixAdvertisementsTlv;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.stat.tlvs.DuplicateUpdatesTlv;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.stat.tlvs.DuplicateWithdrawsTlv;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.stat.tlvs.InvalidatedAsConfedLoopTlv;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.stat.tlvs.InvalidatedAsPathLoopTlv;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.stat.tlvs.InvalidatedClusterListLoopTlv;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.stat.tlvs.InvalidatedOriginatorIdTlv;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.stat.tlvs.LocRibRoutesTlv;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.stat.tlvs.PerAfiSafiAdjRibInTlv;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.stat.tlvs.PerAfiSafiLocRibTlv;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.stat.tlvs.PrefixesTreatedAsWithdrawTlv;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.stat.tlvs.RejectedPrefixesTlv;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.stat.tlvs.UpdatesTreatedAsWithdrawTlv;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.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(), statisticsReportHandler));
118 regs.add(context.registerBmpMessageSerializer(StatsReportsMessage.class, statisticsReportHandler));
120 final RouteMonitoringMessageHandler routeMonitoringMessageHandler = new RouteMonitoringMessageHandler(this.messageRegistry);
121 regs.add(context.registerBmpMessageParser(routeMonitoringMessageHandler.getBmpMessageType(), routeMonitoringMessageHandler));
122 regs.add(context.registerBmpMessageSerializer(RouteMonitoringMessage.class, routeMonitoringMessageHandler));
124 final RouteMirroringMessageHandler routeMirroringMessageHandler = new RouteMirroringMessageHandler(this.messageRegistry, context.getBmpRouteMirroringTlvRegistry());
125 regs.add(context.registerBmpMessageParser(routeMirroringMessageHandler.getBmpMessageType(), routeMirroringMessageHandler));
126 regs.add(context.registerBmpMessageSerializer(RouteMirroringMessage.class, routeMirroringMessageHandler));
130 private static void registerBmpTlvHandlers(final List<AutoCloseable> regs, final BmpExtensionProviderContext context) {
131 final DescriptionTlvHandler descriptionTlvHandler = new DescriptionTlvHandler();
132 regs.add(context.registerBmpInitiationTlvParser(DescriptionTlvHandler.TYPE, descriptionTlvHandler));
133 regs.add(context.registerBmpInitiationTlvSerializer(DescriptionTlv.class, descriptionTlvHandler));
135 final NameTlvHandler nameTlvHandler = new NameTlvHandler();
136 regs.add(context.registerBmpInitiationTlvParser(NameTlvHandler.TYPE, nameTlvHandler));
137 regs.add(context.registerBmpInitiationTlvSerializer(NameTlv.class, nameTlvHandler));
139 final StringTlvHandler stringTlvHandler = new StringTlvHandler();
140 regs.add(context.registerBmpInitiationTlvParser(StringTlvHandler.TYPE, stringTlvHandler));
141 regs.add(context.registerBmpInitiationTlvSerializer(StringTlv.class, stringTlvHandler));
142 regs.add(context.registerBmpTerminationTlvParser(StringTlvHandler.TYPE, stringTlvHandler));
143 regs.add(context.registerBmpTerminationTlvSerializer(StringTlv.class, stringTlvHandler));
144 regs.add(context.registerBmpPeerUpTlvParser(StringTlvHandler.TYPE, stringTlvHandler));
145 regs.add(context.registerBmpPeerUpTlvSerializer(StringTlv.class, stringTlvHandler));
147 final ReasonTlvHandler reasonTlvHandler = new ReasonTlvHandler();
148 regs.add(context.registerBmpTerminationTlvParser(ReasonTlvHandler.TYPE, reasonTlvHandler));
149 regs.add(context.registerBmpTerminationTlvSerializer(ReasonTlv.class, reasonTlvHandler));
151 final MirrorInformationTlvHandler informationTlvHandler = new MirrorInformationTlvHandler();
152 regs.add(context.registerBmpRouteMirroringTlvParser(MirrorInformationTlvHandler.TYPE, informationTlvHandler));
153 regs.add(context.registerBmpRouteMirroringTlvSerializer(MirrorInformationTlv.class, informationTlvHandler));
156 private void registerBmpStatTlvHandlers(final List<AutoCloseable> regs, final BmpExtensionProviderContext context) {
157 final StatType000TlvHandler statType000TlvHandler = new StatType000TlvHandler();
158 regs.add(context.registerBmpStatisticsTlvParser(StatType000TlvHandler.TYPE, statType000TlvHandler));
159 regs.add(context.registerBmpStatisticsTlvSerializer(RejectedPrefixesTlv.class, statType000TlvHandler));
161 final StatType001TlvHandler statType001TlvHandler = new StatType001TlvHandler();
162 regs.add(context.registerBmpStatisticsTlvParser(StatType001TlvHandler.TYPE, statType001TlvHandler));
163 regs.add(context.registerBmpStatisticsTlvSerializer(DuplicatePrefixAdvertisementsTlv.class, statType001TlvHandler));
165 final StatType002TlvHandler statType002TlvHandler = new StatType002TlvHandler();
166 regs.add(context.registerBmpStatisticsTlvParser(StatType002TlvHandler.TYPE, statType002TlvHandler));
167 regs.add(context.registerBmpStatisticsTlvSerializer(DuplicateWithdrawsTlv.class, statType002TlvHandler));
169 final StatType003TlvHandler statType003TlvHandler = new StatType003TlvHandler();
170 regs.add(context.registerBmpStatisticsTlvParser(StatType003TlvHandler.TYPE, statType003TlvHandler));
171 regs.add(context.registerBmpStatisticsTlvSerializer(InvalidatedClusterListLoopTlv.class, statType003TlvHandler));
173 final StatType004TlvHandler statType004TlvHandler = new StatType004TlvHandler();
174 regs.add(context.registerBmpStatisticsTlvParser(StatType004TlvHandler.TYPE, statType004TlvHandler));
175 regs.add(context.registerBmpStatisticsTlvSerializer(InvalidatedAsPathLoopTlv.class, statType004TlvHandler));
177 final StatType005TlvHandler statType005TlvHandler = new StatType005TlvHandler();
178 regs.add(context.registerBmpStatisticsTlvParser(StatType005TlvHandler.TYPE, statType005TlvHandler));
179 regs.add(context.registerBmpStatisticsTlvSerializer(InvalidatedOriginatorIdTlv.class, statType005TlvHandler));
181 final StatType006TlvHandler statType006TlvHandler = new StatType006TlvHandler();
182 regs.add(context.registerBmpStatisticsTlvParser(StatType006TlvHandler.TYPE, statType006TlvHandler));
183 regs.add(context.registerBmpStatisticsTlvSerializer(InvalidatedAsConfedLoopTlv.class, statType006TlvHandler));
185 final StatType007TlvHandler statType007TlvHandler = new StatType007TlvHandler();
186 regs.add(context.registerBmpStatisticsTlvParser(StatType007TlvHandler.TYPE, statType007TlvHandler));
187 regs.add(context.registerBmpStatisticsTlvSerializer(AdjRibsInRoutesTlv.class, statType007TlvHandler));
189 final StatType008TlvHandler statType008TlvHandler = new StatType008TlvHandler();
190 regs.add(context.registerBmpStatisticsTlvParser(StatType008TlvHandler.TYPE, statType008TlvHandler));
191 regs.add(context.registerBmpStatisticsTlvSerializer(LocRibRoutesTlv.class, statType008TlvHandler));
193 final StatType009TlvHandler statType009TlvHandler = new StatType009TlvHandler(this.afiRegistry, this.safiRegistry);
194 regs.add(context.registerBmpStatisticsTlvParser(StatType009TlvHandler.TYPE, statType009TlvHandler));
195 regs.add(context.registerBmpStatisticsTlvSerializer(PerAfiSafiAdjRibInTlv.class, statType009TlvHandler));
197 final StatType010TlvHandler statType010TlvHandler = new StatType010TlvHandler(this.afiRegistry, this.safiRegistry);
198 regs.add(context.registerBmpStatisticsTlvParser(StatType010TlvHandler.TYPE, statType010TlvHandler));
199 regs.add(context.registerBmpStatisticsTlvSerializer(PerAfiSafiLocRibTlv.class, statType010TlvHandler));
201 final StatType011TlvHandler statType011TlvHandler = new StatType011TlvHandler();
202 regs.add(context.registerBmpStatisticsTlvParser(StatType011TlvHandler.TYPE, statType011TlvHandler));
203 regs.add(context.registerBmpStatisticsTlvSerializer(UpdatesTreatedAsWithdrawTlv.class, statType011TlvHandler));
205 final StatType012TlvHandler statType012TlvHandler = new StatType012TlvHandler();
206 regs.add(context.registerBmpStatisticsTlvParser(StatType012TlvHandler.TYPE, statType012TlvHandler));
207 regs.add(context.registerBmpStatisticsTlvSerializer(PrefixesTreatedAsWithdrawTlv.class, statType012TlvHandler));
209 final StatType013TlvHandler statType013TlvHandler = new StatType013TlvHandler();
210 regs.add(context.registerBmpStatisticsTlvParser(StatType013TlvHandler.TYPE, statType013TlvHandler));
211 regs.add(context.registerBmpStatisticsTlvSerializer(DuplicateUpdatesTlv.class, statType013TlvHandler));