blob: 7e91fbdb524b2b366cf258ee68ad809ed93a4df4 [file] [log] [blame]
sunishvkf7c56552016-07-18 16:02:39 +05301/*
2 * Copyright 2016-present Open Networking Laboratory
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package org.onosproject.provider.ospf.cfg.impl;
17
18import com.fasterxml.jackson.databind.JsonNode;
19import org.apache.felix.scr.annotations.Activate;
20import org.apache.felix.scr.annotations.Component;
21import org.apache.felix.scr.annotations.Deactivate;
22import org.apache.felix.scr.annotations.Service;
23import org.apache.felix.scr.annotations.Reference;
24import org.apache.felix.scr.annotations.ReferenceCardinality;
25import org.onosproject.core.ApplicationId;
26import org.onosproject.core.CoreService;
27import org.onosproject.net.config.ConfigFactory;
28import org.onosproject.net.config.NetworkConfigEvent;
29import org.onosproject.net.config.NetworkConfigListener;
30import org.onosproject.net.config.NetworkConfigRegistry;
31import org.onosproject.net.config.NetworkConfigService;
32import org.onosproject.net.config.basics.SubjectFactories;
33import org.onosproject.net.provider.AbstractProvider;
34import org.onosproject.net.provider.ProviderId;
35import org.onosproject.ospf.controller.OspfController;
36import org.slf4j.Logger;
37
38import static org.slf4j.LoggerFactory.getLogger;
39
40/**
41 * Provider which advertises device descriptions to the core.
42 */
43@Component(immediate = true)
44@Service
45public class OspfCfgProvider extends AbstractProvider {
46
47 static final String PROVIDER_ID = "org.onosproject.provider.ospf.cfg";
48 private static final Logger log = getLogger(OspfCfgProvider.class);
49 private final ConfigFactory configFactory =
50 new ConfigFactory(SubjectFactories.APP_SUBJECT_FACTORY, OspfAppConfig.class, "ospfapp") {
51 @Override
52 public OspfAppConfig createConfig() {
53 return new OspfAppConfig();
54 }
55 };
56 private final NetworkConfigListener configListener = new InternalConfigListener();
57 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
58 protected OspfController ospfController;
59 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
60 protected CoreService coreService;
61 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
62 protected NetworkConfigRegistry configRegistry;
63 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
64 protected NetworkConfigService configService;
65 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
66 protected OspfController controller;
67 private ApplicationId appId;
68
69 /**
70 * Creates an OSPF device provider.
71 */
72 public OspfCfgProvider() {
73 super(new ProviderId("ospf", PROVIDER_ID));
74 }
75
76 public void setOspfController(OspfController ospfController) {
77 this.ospfController = ospfController;
78 }
79
80 @Activate
81 public void activate() {
82 appId = coreService.registerApplication(PROVIDER_ID);
83 configService.addListener(configListener);
84 configRegistry.registerConfigFactory(configFactory);
85 log.info("activated...!!!");
86 }
87
88 @Deactivate
89 public void deactivate() {
90 configRegistry.unregisterConfigFactory(configFactory);
91 configService.removeListener(configListener);
92 log.info("deactivated...!!!");
93 }
94
95 private void updateConfig() {
96 OspfAppConfig ospfAppConfig = configRegistry.getConfig(appId, OspfAppConfig.class);
97 if ("ADD".equalsIgnoreCase(ospfAppConfig.method())) {
98 JsonNode jsonNode = ospfAppConfig.processes();
99 ospfController.updateConfig(jsonNode);
100 } else {
101 log.debug("Please signify prop1 and prop2");
102 }
103 }
104
105 /**
106 * OSPF config listener to populate the configuration.
107 */
108 private class InternalConfigListener implements NetworkConfigListener {
109 @Override
110 public void event(NetworkConfigEvent event) {
111 log.debug("InternalConfigListener:: event is getting called");
112 if (!event.configClass().equals(OspfAppConfig.class)) {
113 return;
114 }
115 switch (event.type()) {
116 case CONFIG_ADDED:
117 updateConfig();
118 break;
119 case CONFIG_UPDATED:
120 updateConfig();
121 break;
122 case CONFIG_REMOVED:
123 break;
124 default:
125 break;
126 }
127 }
128 }
129}