YANG revision dates mass-update
[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
9 package org.opendaylight.protocol.bmp.parser;
10
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;
71
72
73
74 /**
75  * Created by cgasparini on 15.5.2015.
76  */
77 public final class BmpActivator extends AbstractBmpExtensionProviderActivator {
78
79     private final MessageRegistry messageRegistry;
80     private final AddressFamilyRegistry afiRegistry;
81     private final SubsequentAddressFamilyRegistry safiRegistry;
82
83     public BmpActivator(final BGPExtensionConsumerContext context) {
84         this.messageRegistry = context.getMessageRegistry();
85         this.afiRegistry = context.getAddressFamilyRegistry();
86         this.safiRegistry = context.getSubsequentAddressFamilyRegistry();
87     }
88
89     @Override
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);
95         return regs;
96     }
97
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));
102
103         final TerminationHandler terminationHandler = new TerminationHandler(context.getBmpTerminationTlvRegistry());
104         regs.add(context.registerBmpMessageParser(terminationHandler.getBmpMessageType(), terminationHandler));
105         regs.add(context.registerBmpMessageSerializer(TerminationMessage.class, terminationHandler));
106
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));
110
111         final PeerDownHandler peerDownHandler = new PeerDownHandler(this.messageRegistry);
112         regs.add(context.registerBmpMessageParser(peerDownHandler.getBmpMessageType(), peerDownHandler));
113         regs.add(context.registerBmpMessageSerializer(PeerDownNotification.class, peerDownHandler));
114
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));
120
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));
126
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));
132
133     }
134
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));
140
141         final NameTlvHandler nameTlvHandler = new NameTlvHandler();
142         regs.add(context.registerBmpInitiationTlvParser(NameTlvHandler.TYPE, nameTlvHandler));
143         regs.add(context.registerBmpInitiationTlvSerializer(NameTlv.class, nameTlvHandler));
144
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));
152
153         final ReasonTlvHandler reasonTlvHandler = new ReasonTlvHandler();
154         regs.add(context.registerBmpTerminationTlvParser(ReasonTlvHandler.TYPE, reasonTlvHandler));
155         regs.add(context.registerBmpTerminationTlvSerializer(ReasonTlv.class, reasonTlvHandler));
156
157         final MirrorInformationTlvHandler informationTlvHandler = new MirrorInformationTlvHandler();
158         regs.add(context.registerBmpRouteMirroringTlvParser(MirrorInformationTlvHandler.TYPE, informationTlvHandler));
159         regs.add(context.registerBmpRouteMirroringTlvSerializer(MirrorInformationTlv.class, informationTlvHandler));
160     }
161
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));
167
168         final StatType001TlvHandler statType001TlvHandler = new StatType001TlvHandler();
169         regs.add(context.registerBmpStatisticsTlvParser(StatType001TlvHandler.TYPE, statType001TlvHandler));
170         regs.add(context.registerBmpStatisticsTlvSerializer(DuplicatePrefixAdvertisementsTlv.class,
171                 statType001TlvHandler));
172
173         final StatType002TlvHandler statType002TlvHandler = new StatType002TlvHandler();
174         regs.add(context.registerBmpStatisticsTlvParser(StatType002TlvHandler.TYPE, statType002TlvHandler));
175         regs.add(context.registerBmpStatisticsTlvSerializer(DuplicateWithdrawsTlv.class, statType002TlvHandler));
176
177         final StatType003TlvHandler statType003TlvHandler = new StatType003TlvHandler();
178         regs.add(context.registerBmpStatisticsTlvParser(StatType003TlvHandler.TYPE, statType003TlvHandler));
179         regs.add(context.registerBmpStatisticsTlvSerializer(InvalidatedClusterListLoopTlv.class,
180                 statType003TlvHandler));
181
182         final StatType004TlvHandler statType004TlvHandler = new StatType004TlvHandler();
183         regs.add(context.registerBmpStatisticsTlvParser(StatType004TlvHandler.TYPE, statType004TlvHandler));
184         regs.add(context.registerBmpStatisticsTlvSerializer(InvalidatedAsPathLoopTlv.class, statType004TlvHandler));
185
186         final StatType005TlvHandler statType005TlvHandler = new StatType005TlvHandler();
187         regs.add(context.registerBmpStatisticsTlvParser(StatType005TlvHandler.TYPE, statType005TlvHandler));
188         regs.add(context.registerBmpStatisticsTlvSerializer(InvalidatedOriginatorIdTlv.class, statType005TlvHandler));
189
190         final StatType006TlvHandler statType006TlvHandler = new StatType006TlvHandler();
191         regs.add(context.registerBmpStatisticsTlvParser(StatType006TlvHandler.TYPE, statType006TlvHandler));
192         regs.add(context.registerBmpStatisticsTlvSerializer(InvalidatedAsConfedLoopTlv.class, statType006TlvHandler));
193
194         final StatType007TlvHandler statType007TlvHandler = new StatType007TlvHandler();
195         regs.add(context.registerBmpStatisticsTlvParser(StatType007TlvHandler.TYPE, statType007TlvHandler));
196         regs.add(context.registerBmpStatisticsTlvSerializer(AdjRibsInRoutesTlv.class, statType007TlvHandler));
197
198         final StatType008TlvHandler statType008TlvHandler = new StatType008TlvHandler();
199         regs.add(context.registerBmpStatisticsTlvParser(StatType008TlvHandler.TYPE, statType008TlvHandler));
200         regs.add(context.registerBmpStatisticsTlvSerializer(LocRibRoutesTlv.class, statType008TlvHandler));
201
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));
206
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));
211
212         final StatType011TlvHandler statType011TlvHandler = new StatType011TlvHandler();
213         regs.add(context.registerBmpStatisticsTlvParser(StatType011TlvHandler.TYPE, statType011TlvHandler));
214         regs.add(context.registerBmpStatisticsTlvSerializer(UpdatesTreatedAsWithdrawTlv.class, statType011TlvHandler));
215
216         final StatType012TlvHandler statType012TlvHandler = new StatType012TlvHandler();
217         regs.add(context.registerBmpStatisticsTlvParser(StatType012TlvHandler.TYPE, statType012TlvHandler));
218         regs.add(context.registerBmpStatisticsTlvSerializer(PrefixesTreatedAsWithdrawTlv.class, statType012TlvHandler));
219
220         final StatType013TlvHandler statType013TlvHandler = new StatType013TlvHandler();
221         regs.add(context.registerBmpStatisticsTlvParser(StatType013TlvHandler.TYPE, statType013TlvHandler));
222         regs.add(context.registerBmpStatisticsTlvSerializer(DuplicateUpdatesTlv.class, statType013TlvHandler));
223
224     }
225 }