Code clean up
[bgpcep.git] / bgp / extensions / linkstate / src / main / java / org / opendaylight / protocol / bgp / linkstate / impl / BGPActivator.java
1 /*
2  * Copyright (c) 2016 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.bgp.linkstate.impl;
9
10 import java.util.ArrayList;
11 import java.util.List;
12 import org.opendaylight.protocol.bgp.linkstate.impl.attribute.LinkstateAttributeParser;
13 import org.opendaylight.protocol.bgp.linkstate.impl.attribute.sr.binding.sid.sub.tlvs.BackupUnnumberedParser;
14 import org.opendaylight.protocol.bgp.linkstate.impl.attribute.sr.binding.sid.sub.tlvs.EroMetricParser;
15 import org.opendaylight.protocol.bgp.linkstate.impl.attribute.sr.binding.sid.sub.tlvs.Ipv4BackupEro;
16 import org.opendaylight.protocol.bgp.linkstate.impl.attribute.sr.binding.sid.sub.tlvs.Ipv4EroParser;
17 import org.opendaylight.protocol.bgp.linkstate.impl.attribute.sr.binding.sid.sub.tlvs.Ipv4PrefixSidParser;
18 import org.opendaylight.protocol.bgp.linkstate.impl.attribute.sr.binding.sid.sub.tlvs.Ipv6BackupEro;
19 import org.opendaylight.protocol.bgp.linkstate.impl.attribute.sr.binding.sid.sub.tlvs.Ipv6EroParser;
20 import org.opendaylight.protocol.bgp.linkstate.impl.attribute.sr.binding.sid.sub.tlvs.Ipv6PrefixSidParser;
21 import org.opendaylight.protocol.bgp.linkstate.impl.attribute.sr.binding.sid.sub.tlvs.SIDParser;
22 import org.opendaylight.protocol.bgp.linkstate.impl.attribute.sr.binding.sid.sub.tlvs.UnnumberedEroParser;
23 import org.opendaylight.protocol.bgp.linkstate.impl.nlri.Ipv4PrefixNlriParser;
24 import org.opendaylight.protocol.bgp.linkstate.impl.nlri.Ipv6PrefixNlriParser;
25 import org.opendaylight.protocol.bgp.linkstate.impl.nlri.LinkNlriParser;
26 import org.opendaylight.protocol.bgp.linkstate.impl.nlri.LinkstateNlriParser;
27 import org.opendaylight.protocol.bgp.linkstate.impl.nlri.NodeNlriParser;
28 import org.opendaylight.protocol.bgp.linkstate.impl.nlri.TeLspIpv4NlriParser;
29 import org.opendaylight.protocol.bgp.linkstate.impl.nlri.TeLspIpv6NlriParser;
30 import org.opendaylight.protocol.bgp.linkstate.impl.tlvs.AdvertisingNodeDescriptorTlvParser;
31 import org.opendaylight.protocol.bgp.linkstate.impl.tlvs.AreaIdTlvParser;
32 import org.opendaylight.protocol.bgp.linkstate.impl.tlvs.AsNumTlvParser;
33 import org.opendaylight.protocol.bgp.linkstate.impl.tlvs.BgpRouterIdTlvParser;
34 import org.opendaylight.protocol.bgp.linkstate.impl.tlvs.DomainIdTlvParser;
35 import org.opendaylight.protocol.bgp.linkstate.impl.tlvs.Ipv4InterfaceTlvParser;
36 import org.opendaylight.protocol.bgp.linkstate.impl.tlvs.Ipv4NeighborTlvParser;
37 import org.opendaylight.protocol.bgp.linkstate.impl.tlvs.Ipv6InterfaceTlvParser;
38 import org.opendaylight.protocol.bgp.linkstate.impl.tlvs.Ipv6NeighborTlvParser;
39 import org.opendaylight.protocol.bgp.linkstate.impl.tlvs.LinkIdTlvParser;
40 import org.opendaylight.protocol.bgp.linkstate.impl.tlvs.LocalNodeDescriptorTlvParser;
41 import org.opendaylight.protocol.bgp.linkstate.impl.tlvs.MemAsNumTlvParser;
42 import org.opendaylight.protocol.bgp.linkstate.impl.tlvs.MultiTopoIdTlvParser;
43 import org.opendaylight.protocol.bgp.linkstate.impl.tlvs.NodeDescriptorTlvParser;
44 import org.opendaylight.protocol.bgp.linkstate.impl.tlvs.OspfRouteTlvParser;
45 import org.opendaylight.protocol.bgp.linkstate.impl.tlvs.ReachTlvParser;
46 import org.opendaylight.protocol.bgp.linkstate.impl.tlvs.RemoteNodeDescriptorTlvParser;
47 import org.opendaylight.protocol.bgp.linkstate.impl.tlvs.RouterIdTlvParser;
48 import org.opendaylight.protocol.bgp.linkstate.spi.pojo.SimpleBindingSubTlvsRegistry;
49 import org.opendaylight.protocol.bgp.linkstate.spi.pojo.SimpleNlriTypeRegistry;
50 import org.opendaylight.protocol.bgp.parser.spi.AbstractBGPExtensionProviderActivator;
51 import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionProviderContext;
52 import org.opendaylight.protocol.bgp.parser.spi.NextHopParserSerializer;
53 import org.opendaylight.protocol.rsvp.parser.spi.RSVPTeObjectRegistry;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.Attributes1;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.LinkstateAddressFamily;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.LinkstateSubsequentAddressFamily;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.linkstate.object.type.LinkCase;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.linkstate.object.type.NodeCase;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.linkstate.object.type.PrefixCase;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.linkstate.object.type.TeLspCase;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.linkstate.routes.LinkstateRoutes;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev151014.binding.sub.tlvs.binding.sub.tlv.EroMetricCase;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev151014.binding.sub.tlvs.binding.sub.tlv.Ipv4EroBackupCase;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev151014.binding.sub.tlvs.binding.sub.tlv.Ipv4EroCase;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev151014.binding.sub.tlvs.binding.sub.tlv.Ipv6EroBackupCase;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev151014.binding.sub.tlvs.binding.sub.tlv.Ipv6EroCase;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev151014.binding.sub.tlvs.binding.sub.tlv.Ipv6PrefixSidCase;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev151014.binding.sub.tlvs.binding.sub.tlv.PrefixSidCase;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev151014.binding.sub.tlvs.binding.sub.tlv.SidLabelCase;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev151014.binding.sub.tlvs.binding.sub.tlv.UnnumberedInterfaceIdBackupEroCase;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev151014.binding.sub.tlvs.binding.sub.tlv.UnnumberedInterfaceIdEroCase;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.next.hop.c.next.hop.Ipv4NextHopCase;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.next.hop.c.next.hop.Ipv6NextHopCase;
74
75 /**
76  * Activator for registering linkstate extensions to BGP parser.
77  */
78 public final class BGPActivator extends AbstractBGPExtensionProviderActivator {
79
80     private static final int LINKSTATE_AFI = 16388;
81
82     private static final int LINKSTATE_SAFI = 71;
83
84     private final boolean ianaLinkstateAttributeType;
85
86     private final RSVPTeObjectRegistry rsvpTeObjectRegistry;
87
88     public BGPActivator() {
89         super();
90         this.ianaLinkstateAttributeType = true;
91         this.rsvpTeObjectRegistry = null;
92     }
93
94     public BGPActivator(final boolean ianaLinkstateAttributeType, final RSVPTeObjectRegistry rsvpTeObjectRegistry) {
95         super();
96         this.rsvpTeObjectRegistry = rsvpTeObjectRegistry;
97         this.ianaLinkstateAttributeType = ianaLinkstateAttributeType;
98     }
99
100     @Override
101     protected List<AutoCloseable> startImpl(final BGPExtensionProviderContext context) {
102         final List<AutoCloseable> regs = new ArrayList<>();
103
104         final SimpleNlriTypeRegistry nlriTypeReg = SimpleNlriTypeRegistry.getInstance();
105
106         regs.add(context.registerAddressFamily(LinkstateAddressFamily.class, LINKSTATE_AFI));
107         regs.add(context.registerSubsequentAddressFamily(LinkstateSubsequentAddressFamily.class, LINKSTATE_SAFI));
108
109         final NextHopParserSerializer linkstateNextHopParser = new NextHopParserSerializer() {
110         };
111         final LinkstateNlriParser parser = new LinkstateNlriParser();
112         regs.add(context.registerNlriParser(LinkstateAddressFamily.class, LinkstateSubsequentAddressFamily.class,
113             parser, linkstateNextHopParser, Ipv4NextHopCase.class, Ipv6NextHopCase.class));
114         regs.add(context.registerNlriSerializer(LinkstateRoutes.class, parser));
115
116         regs.add(context.registerAttributeSerializer(Attributes1.class, new LinkstateAttributeParser(this.ianaLinkstateAttributeType, this.rsvpTeObjectRegistry)));
117         final LinkstateAttributeParser linkstateAttributeParser = new LinkstateAttributeParser(this.ianaLinkstateAttributeType, this.rsvpTeObjectRegistry);
118         regs.add(context.registerAttributeParser(linkstateAttributeParser.getType(), linkstateAttributeParser));
119
120         registerNlriCodecs(regs, nlriTypeReg);
121         registerNlriTlvCodecs(regs, nlriTypeReg);
122         registerBindingSubTlvs(regs);
123         return regs;
124     }
125
126     private static void registerBindingSubTlvs(final List<AutoCloseable> regs) {
127         final SimpleBindingSubTlvsRegistry simpleReg = SimpleBindingSubTlvsRegistry.getInstance();
128
129         final SIDParser sidParser = new SIDParser();
130         regs.add(simpleReg.registerBindingSubTlvsParser(sidParser.getType(), sidParser));
131         regs.add(simpleReg.registerBindingSubTlvsSerializer(SidLabelCase.class, sidParser));
132
133         final Ipv4PrefixSidParser prefixSidParser = new Ipv4PrefixSidParser();
134         regs.add(simpleReg.registerBindingSubTlvsParser(prefixSidParser.getType(), prefixSidParser));
135         regs.add(simpleReg.registerBindingSubTlvsSerializer(PrefixSidCase.class, prefixSidParser));
136
137         final Ipv6PrefixSidParser ipv6PrefixSidParser = new Ipv6PrefixSidParser();
138         regs.add(simpleReg.registerBindingSubTlvsParser(ipv6PrefixSidParser.getType(), ipv6PrefixSidParser));
139         regs.add(simpleReg.registerBindingSubTlvsSerializer(Ipv6PrefixSidCase.class, ipv6PrefixSidParser));
140
141         final EroMetricParser eroMetricParser = new EroMetricParser();
142         regs.add(simpleReg.registerBindingSubTlvsParser(eroMetricParser.getType(), eroMetricParser));
143         regs.add(simpleReg.registerBindingSubTlvsSerializer(EroMetricCase.class, eroMetricParser));
144
145         final Ipv4EroParser ipv4EroParser = new Ipv4EroParser();
146         regs.add(simpleReg.registerBindingSubTlvsParser(ipv4EroParser.getType(), ipv4EroParser));
147         regs.add(simpleReg.registerBindingSubTlvsSerializer(Ipv4EroCase.class, ipv4EroParser));
148
149         final Ipv4BackupEro ipv4BackupEro = new Ipv4BackupEro();
150         regs.add(simpleReg.registerBindingSubTlvsParser(ipv4BackupEro.getType(), ipv4BackupEro));
151         regs.add(simpleReg.registerBindingSubTlvsSerializer(Ipv4EroBackupCase.class, ipv4BackupEro));
152
153         final Ipv6EroParser ipv6EroParser = new Ipv6EroParser();
154         regs.add(simpleReg.registerBindingSubTlvsParser(ipv6EroParser.getType(), ipv6EroParser));
155         regs.add(simpleReg.registerBindingSubTlvsSerializer(Ipv6EroCase.class, ipv6EroParser));
156
157         final Ipv6BackupEro ipv6BackupEro = new Ipv6BackupEro();
158         regs.add(simpleReg.registerBindingSubTlvsParser(ipv6BackupEro.getType(), ipv6BackupEro));
159         regs.add(simpleReg.registerBindingSubTlvsSerializer(Ipv6EroBackupCase.class, ipv6BackupEro));
160
161         final UnnumberedEroParser unnumberedEroParser = new UnnumberedEroParser();
162         regs.add(simpleReg.registerBindingSubTlvsParser(unnumberedEroParser.getType(), unnumberedEroParser));
163         regs.add(simpleReg.registerBindingSubTlvsSerializer(UnnumberedInterfaceIdEroCase.class, unnumberedEroParser));
164
165         final BackupUnnumberedParser backupUnnumberedParser = new BackupUnnumberedParser();
166         regs.add(simpleReg.registerBindingSubTlvsParser(backupUnnumberedParser.getType(), backupUnnumberedParser));
167         regs.add(simpleReg.registerBindingSubTlvsSerializer(UnnumberedInterfaceIdBackupEroCase.class, backupUnnumberedParser));
168     }
169
170     private static void registerNlriCodecs(final List<AutoCloseable> regs, final SimpleNlriTypeRegistry nlriTypeReg) {
171
172         final NodeNlriParser nodeParser = new NodeNlriParser();
173         regs.add(nlriTypeReg.registerNlriParser(nodeParser.getNlriType(), nodeParser));
174         regs.add(nlriTypeReg.registerNlriSerializer(NodeCase.class, nodeParser));
175
176         final LinkNlriParser linkParser = new LinkNlriParser();
177         regs.add(nlriTypeReg.registerNlriParser(linkParser.getNlriType(), linkParser));
178         regs.add(nlriTypeReg.registerNlriSerializer(LinkCase.class, linkParser));
179
180         final Ipv4PrefixNlriParser ipv4PrefixParser = new Ipv4PrefixNlriParser();
181         regs.add(nlriTypeReg.registerNlriParser(ipv4PrefixParser.getNlriType(), ipv4PrefixParser));
182         regs.add(nlriTypeReg.registerNlriSerializer(PrefixCase.class, ipv4PrefixParser));
183         final Ipv6PrefixNlriParser ipv6PrefixParser = new Ipv6PrefixNlriParser();
184         regs.add(nlriTypeReg.registerNlriParser(ipv6PrefixParser.getNlriType(), ipv6PrefixParser));
185
186         final TeLspIpv4NlriParser teLspIpv4Parser = new TeLspIpv4NlriParser();
187         regs.add(nlriTypeReg.registerNlriParser(teLspIpv4Parser.getNlriType(), teLspIpv4Parser));
188         regs.add(nlriTypeReg.registerNlriSerializer(TeLspCase.class, teLspIpv4Parser));
189         final TeLspIpv6NlriParser teLspIpv6Parser = new TeLspIpv6NlriParser();
190         regs.add(nlriTypeReg.registerNlriParser(teLspIpv6Parser.getNlriType(), teLspIpv6Parser));
191
192     }
193
194     private static void registerNlriTlvCodecs(final List<AutoCloseable> regs, final SimpleNlriTypeRegistry nlriTypeReg) {
195
196         final LocalNodeDescriptorTlvParser localParser = new LocalNodeDescriptorTlvParser();
197         regs.add(nlriTypeReg.registerTlvParser(localParser.getType(), localParser));
198         regs.add(nlriTypeReg.registerTlvSerializer(localParser.getTlvQName(), localParser));
199
200         final NodeDescriptorTlvParser nodeParser = new NodeDescriptorTlvParser();
201         regs.add(nlriTypeReg.registerTlvSerializer(nodeParser.getTlvQName(), nodeParser));
202
203         final AdvertisingNodeDescriptorTlvParser advParser = new AdvertisingNodeDescriptorTlvParser();
204         regs.add(nlriTypeReg.registerTlvSerializer(advParser.getTlvQName(), advParser));
205
206         final RemoteNodeDescriptorTlvParser remoteParser = new RemoteNodeDescriptorTlvParser();
207         regs.add(nlriTypeReg.registerTlvParser(remoteParser.getType(), remoteParser));
208         regs.add(nlriTypeReg.registerTlvSerializer(remoteParser.getTlvQName(), remoteParser));
209
210         final RouterIdTlvParser bgpCrouterIdParser = new RouterIdTlvParser();
211         regs.add(nlriTypeReg.registerTlvParser(bgpCrouterIdParser.getType(), bgpCrouterIdParser));
212         regs.add(nlriTypeReg.registerTlvSerializer(bgpCrouterIdParser.getTlvQName(), bgpCrouterIdParser));
213
214         final AsNumTlvParser asNumParser = new AsNumTlvParser();
215         regs.add(nlriTypeReg.registerTlvParser(asNumParser.getType(), asNumParser));
216         regs.add(nlriTypeReg.registerTlvSerializer(asNumParser.getTlvQName(), asNumParser));
217
218         final DomainIdTlvParser bgpDomainIdParser = new DomainIdTlvParser();
219         regs.add(nlriTypeReg.registerTlvParser(bgpDomainIdParser.getType(), bgpDomainIdParser));
220         regs.add(nlriTypeReg.registerTlvSerializer(bgpDomainIdParser.getTlvQName(), bgpDomainIdParser));
221
222         final AreaIdTlvParser areaIdParser = new AreaIdTlvParser();
223         regs.add(nlriTypeReg.registerTlvParser(areaIdParser.getType(), areaIdParser));
224         regs.add(nlriTypeReg.registerTlvSerializer(areaIdParser.getTlvQName(), areaIdParser));
225
226         final BgpRouterIdTlvParser bgpRouterIdParser = new BgpRouterIdTlvParser();
227         regs.add(nlriTypeReg.registerTlvParser(bgpRouterIdParser.getType(), bgpRouterIdParser));
228         regs.add(nlriTypeReg.registerTlvSerializer(bgpRouterIdParser.getTlvQName(), bgpRouterIdParser));
229
230         final MemAsNumTlvParser memAsnParser = new MemAsNumTlvParser();
231         regs.add(nlriTypeReg.registerTlvParser(memAsnParser.getType(), memAsnParser));
232         regs.add(nlriTypeReg.registerTlvSerializer(memAsnParser.getTlvQName(), memAsnParser));
233
234         final LinkIdTlvParser linkIdParser = new LinkIdTlvParser();
235         regs.add(nlriTypeReg.registerTlvParser(linkIdParser.getType(), linkIdParser));
236         regs.add(nlriTypeReg.registerTlvSerializer(linkIdParser.getTlvQName(), linkIdParser));
237
238         final Ipv4NeighborTlvParser ipv4nNeighborParser = new Ipv4NeighborTlvParser();
239         regs.add(nlriTypeReg.registerTlvParser(ipv4nNeighborParser.getType(), ipv4nNeighborParser));
240         regs.add(nlriTypeReg.registerTlvSerializer(ipv4nNeighborParser.getTlvQName(), ipv4nNeighborParser));
241
242         final Ipv6NeighborTlvParser ipv6NeighborParser = new Ipv6NeighborTlvParser();
243         regs.add(nlriTypeReg.registerTlvParser(ipv6NeighborParser.getType(), ipv6NeighborParser));
244         regs.add(nlriTypeReg.registerTlvSerializer(ipv6NeighborParser.getTlvQName(), ipv6NeighborParser));
245
246         final Ipv4InterfaceTlvParser ipv4InterfaceParser = new Ipv4InterfaceTlvParser();
247         regs.add(nlriTypeReg.registerTlvParser(ipv4InterfaceParser.getType(), ipv4InterfaceParser));
248         regs.add(nlriTypeReg.registerTlvSerializer(ipv4InterfaceParser.getTlvQName(), ipv4InterfaceParser));
249
250         final Ipv6InterfaceTlvParser ipv6InterfaceParser = new Ipv6InterfaceTlvParser();
251         regs.add(nlriTypeReg.registerTlvParser(ipv6InterfaceParser.getType(), ipv6InterfaceParser));
252         regs.add(nlriTypeReg.registerTlvSerializer(ipv6InterfaceParser.getTlvQName(), ipv6InterfaceParser));
253
254         final MultiTopoIdTlvParser multiTopoIdParser = new MultiTopoIdTlvParser();
255         regs.add(nlriTypeReg.registerTlvParser(multiTopoIdParser.getType(), multiTopoIdParser));
256         regs.add(nlriTypeReg.registerTlvSerializer(multiTopoIdParser.getTlvQName(), multiTopoIdParser));
257
258         final ReachTlvParser ipv4ReachParser = new ReachTlvParser();
259         regs.add(nlriTypeReg.registerTlvParser(ipv4ReachParser.getType(), ipv4ReachParser));
260         regs.add(nlriTypeReg.registerTlvSerializer(ipv4ReachParser.getTlvQName(), ipv4ReachParser));
261
262         final OspfRouteTlvParser ospfRouterParser = new OspfRouteTlvParser();
263         regs.add(nlriTypeReg.registerTlvParser(ospfRouterParser.getType(), ospfRouterParser));
264         regs.add(nlriTypeReg.registerTlvSerializer(ospfRouterParser.getTlvQName(), ospfRouterParser));
265     }
266 }