de031a1b8e73bd76d6455c96b53c0ee6ccc09d0a
[bgpcep.git] / pcep / segment-routing / src / main / java / org / opendaylight / protocol / pcep / segment / routing / SegmentRoutingActivator.java
1 /*
2  * Copyright (c) 2014 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.pcep.segment.routing;
10
11 import com.google.common.collect.Lists;
12 import java.util.List;
13 import org.opendaylight.protocol.pcep.spi.PCEPExtensionProviderContext;
14 import org.opendaylight.protocol.pcep.spi.TlvRegistry;
15 import org.opendaylight.protocol.pcep.spi.VendorInformationTlvRegistry;
16 import org.opendaylight.protocol.pcep.spi.pojo.AbstractPCEPExtensionProviderActivator;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev171025.add.lsp.input.arguments.ero.subobject.subobject.type.SrEroType;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev171025.add.lsp.input.arguments.rro.subobject.subobject.type.SrRroType;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev171025.sr.pce.capability.tlv.SrPceCapability;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.Open;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.path.setup.type.tlv.PathSetupType;
22
23 public class SegmentRoutingActivator extends AbstractPCEPExtensionProviderActivator {
24
25     private final boolean ianaSrSubobjectsType;
26
27     public SegmentRoutingActivator() {
28         this.ianaSrSubobjectsType = false;
29     }
30
31     public SegmentRoutingActivator(final boolean ianaSrSubobjectsType) {
32         this.ianaSrSubobjectsType = ianaSrSubobjectsType;
33     }
34
35     @Override
36     protected List<AutoCloseable> startImpl(final PCEPExtensionProviderContext context) {
37         final List<AutoCloseable> regs = Lists.newArrayList();
38
39         /* Tlvs */
40         regs.add(context.registerTlvParser(SrPceCapabilityTlvParser.TYPE, new SrPceCapabilityTlvParser()));
41         regs.add(context.registerTlvParser(SrPathSetupTypeTlvParser.TYPE, new SrPathSetupTypeTlvParser()));
42
43         regs.add(context.registerTlvSerializer(PathSetupType.class, new SrPathSetupTypeTlvParser()));
44         regs.add(context.registerTlvSerializer(SrPceCapability.class, new SrPceCapabilityTlvParser()));
45
46         /* Subobjects */
47         final SrEroSubobjectParser srEroSubobjectParser = new SrEroSubobjectParser(this.ianaSrSubobjectsType);
48         regs.add(context.registerEROSubobjectParser(srEroSubobjectParser.getCodePoint(), srEroSubobjectParser));
49         regs.add(context.registerEROSubobjectSerializer(
50                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev171025.network.topology.topology.node.path.computation.client.reported.lsp.path.ero.subobject.subobject.type.SrEroType.class,
51                 srEroSubobjectParser));
52         regs.add(context.registerEROSubobjectSerializer(
53                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev171025.pcinitiate.pcinitiate.message.requests.ero.subobject.subobject.type.SrEroType.class,
54                 srEroSubobjectParser));
55         regs.add(context.registerEROSubobjectSerializer(
56                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev171025.pcrep.pcrep.message.replies.result.success._case.success.paths.ero.subobject.subobject.type.SrEroType.class,
57                 srEroSubobjectParser));
58         regs.add(context.registerEROSubobjectSerializer(
59                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev171025.pcrpt.pcrpt.message.reports.path.ero.subobject.subobject.type.SrEroType.class,
60                 srEroSubobjectParser));
61         regs.add(context.registerEROSubobjectSerializer(
62                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev171025.pcupd.pcupd.message.updates.path.ero.subobject.subobject.type.SrEroType.class,
63                 srEroSubobjectParser));
64         regs.add(context.registerEROSubobjectSerializer(
65                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev171025.update.lsp.input.arguments.ero.subobject.subobject.type.SrEroType.class,
66                 srEroSubobjectParser));
67         regs.add(context.registerEROSubobjectSerializer(SrEroType.class, srEroSubobjectParser));
68
69         final SrRroSubobjectParser srRroSubobjectParser = new SrRroSubobjectParser(this.ianaSrSubobjectsType);
70         regs.add(context.registerRROSubobjectParser(srRroSubobjectParser.getCodePoint(), srRroSubobjectParser));
71         regs.add(context.registerRROSubobjectSerializer(
72                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev171025.network.topology.topology.node.path.computation.client.reported.lsp.path.rro.subobject.subobject.type.SrRroType.class,
73                 srRroSubobjectParser));
74         regs.add(context.registerRROSubobjectSerializer(
75                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev171025.pcinitiate.pcinitiate.message.requests.rro.subobject.subobject.type.SrRroType.class,
76                 srRroSubobjectParser));
77         regs.add(context.registerRROSubobjectSerializer(
78                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev171025.pcrep.pcrep.message.replies.result.failure._case.rro.subobject.subobject.type.SrRroType.class,
79                 srRroSubobjectParser));
80         regs.add(context.registerRROSubobjectSerializer(
81                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev171025.pcreq.pcreq.message.requests.segment.computation.p2p.reported.route.rro.subobject.subobject.type.SrRroType.class,
82                 srRroSubobjectParser));
83         regs.add(context.registerRROSubobjectSerializer(
84                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev171025.pcrpt.pcrpt.message.reports.path.rro.subobject.subobject.type.SrRroType.class,
85                 srRroSubobjectParser));
86         regs.add(context.registerRROSubobjectSerializer(
87                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev171025.pcupd.pcupd.message.updates.path.rro.subobject.subobject.type.SrRroType.class,
88                 srRroSubobjectParser));
89         regs.add(context.registerRROSubobjectSerializer(
90                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev171025.update.lsp.input.arguments.rro.subobject.subobject.type.SrRroType.class, srRroSubobjectParser));
91         regs.add(context.registerRROSubobjectSerializer(
92                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev171025.pcrep.pcrep.message.replies.result.success._case.success.paths.rro.subobject.subobject.type.SrRroType.class,
93                 srRroSubobjectParser));
94         regs.add(context.registerRROSubobjectSerializer(
95                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev171025.pcreq.pcreq.message.requests.segment.computation.p2p.rro.subobject.subobject.type.SrRroType.class,
96                 srRroSubobjectParser));
97         regs.add(context.registerRROSubobjectSerializer(SrRroType.class, srRroSubobjectParser));
98
99         /* Objects */
100         final TlvRegistry tlvReg = context.getTlvHandlerRegistry();
101         final VendorInformationTlvRegistry viTlvRegistry = context.getVendorInformationTlvRegistry();
102         regs.add(context.registerObjectParser(new PcepOpenObjectWithSpcTlvParser(tlvReg, viTlvRegistry)));
103         regs.add(context.registerObjectSerializer(Open.class, new PcepOpenObjectWithSpcTlvParser(tlvReg, viTlvRegistry)));
104
105         return regs;
106     }
107 }