blob: 249a2da483dd2c47c3ef3a9ba082a8cda592411a [file] [log] [blame]
Thomas Vachuska781d18b2014-10-27 10:31:25 -07001/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2014-present Open Networking Laboratory
Thomas Vachuska781d18b2014-10-27 10:31:25 -07003 *
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07004 * 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
Thomas Vachuska781d18b2014-10-27 10:31:25 -07007 *
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07008 * 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.
Thomas Vachuska781d18b2014-10-27 10:31:25 -070015 */
Brian O'Connorabafb502014-12-02 22:26:20 -080016package org.onosproject.sdnip;
Jonathan Hart039d2b12014-10-10 09:33:04 -070017
Jonathan Hart3d8ff282016-09-06 10:59:41 -070018import com.google.common.collect.ImmutableList;
Jonathan Hart039d2b12014-10-10 09:33:04 -070019import org.apache.felix.scr.annotations.Activate;
20import org.apache.felix.scr.annotations.Component;
21import org.apache.felix.scr.annotations.Deactivate;
Jonathan Hartdc711bd2014-10-15 11:24:23 -070022import org.apache.felix.scr.annotations.Reference;
23import org.apache.felix.scr.annotations.ReferenceCardinality;
Pingping Linc07781f2015-10-30 00:44:41 -070024import org.onosproject.app.ApplicationService;
Brian O'Connorabafb502014-12-02 22:26:20 -080025import org.onosproject.core.ApplicationId;
26import org.onosproject.core.CoreService;
Jonathan Hartc22e8472015-11-17 18:25:45 -080027import org.onosproject.incubator.component.ComponentService;
Jonathan Hart4cb39882015-08-12 23:50:55 -040028import org.onosproject.incubator.net.intf.InterfaceService;
Luca Prete83bac342016-12-06 19:42:05 -080029import org.onosproject.net.config.ConfigFactory;
30import org.onosproject.net.config.NetworkConfigRegistry;
Pingping Linc07781f2015-10-30 00:44:41 -070031import org.onosproject.net.config.NetworkConfigService;
Luca Prete83bac342016-12-06 19:42:05 -080032import org.onosproject.net.config.basics.SubjectFactories;
Jonathan Hart9a426f82015-09-03 15:43:13 +020033import org.onosproject.routing.IntentSynchronizationService;
Jonathan Hart2da1e602015-02-18 19:09:24 -080034import org.onosproject.routing.RoutingService;
Luca Prete83bac342016-12-06 19:42:05 -080035import org.onosproject.sdnip.config.SdnIpConfig;
Pavlin Radoslavova7243cc2014-11-22 21:38:02 -080036import org.slf4j.Logger;
Pavlin Radoslavov8b752442014-11-18 14:34:37 -080037
Jonathan Hartc22e8472015-11-17 18:25:45 -080038import java.util.List;
39
Jonathan Hart365335e2015-12-10 11:09:53 -080040import static org.slf4j.LoggerFactory.getLogger;
41
Jonathan Hart039d2b12014-10-10 09:33:04 -070042/**
Jonathan Hart0b04bed2014-10-16 16:39:19 -070043 * Component for the SDN-IP peering application.
Jonathan Hart039d2b12014-10-10 09:33:04 -070044 */
45@Component(immediate = true)
Jonathan Hart365335e2015-12-10 11:09:53 -080046public class SdnIp {
Jonathan Hart039d2b12014-10-10 09:33:04 -070047
Jonathan Hart365335e2015-12-10 11:09:53 -080048 public static final String SDN_IP_APP = "org.onosproject.sdnip";
Jonathan Hart039d2b12014-10-10 09:33:04 -070049 private final Logger log = getLogger(getClass());
50
Jonathan Hartdc711bd2014-10-15 11:24:23 -070051 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
Thomas Vachuskab97cf282014-10-20 23:31:12 -070052 protected CoreService coreService;
53
54 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
Pingping Linc07781f2015-10-30 00:44:41 -070055 protected ApplicationService applicationService;
56
57 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
Pavlin Radoslavov492cc3a2015-01-22 18:46:26 -080058 protected NetworkConfigService networkConfigService;
59
Jonathan Hart4cb39882015-08-12 23:50:55 -040060 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
61 protected InterfaceService interfaceService;
62
Jonathan Hart365335e2015-12-10 11:09:53 -080063 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
64 protected IntentSynchronizationService intentSynchronizer;
Jonathan Hart41349e92015-02-09 14:14:02 -080065
Jonathan Hart365335e2015-12-10 11:09:53 -080066 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
Luca Prete83bac342016-12-06 19:42:05 -080067 protected NetworkConfigRegistry cfgRegistry;
68
69 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
Jonathan Hartc22e8472015-11-17 18:25:45 -080070 protected ComponentService componentService;
71
Jonathan Hart365335e2015-12-10 11:09:53 -080072 private PeerConnectivityManager peerConnectivity;
73
Pavlin Radoslavovc91eebe2014-11-25 18:45:46 -080074 private ApplicationId appId;
Pavlin Radoslavov8b752442014-11-18 14:34:37 -080075
Jonathan Hart3d8ff282016-09-06 10:59:41 -070076 private final List<String> components = ImmutableList.of(
77 "org.onosproject.routing.bgp.BgpSessionManager",
Jonathan Harta9e29552016-09-09 07:17:41 -070078 "org.onosproject.routing.impl.BgpSpeakerNeighbourHandler",
Jonathan Hart3d8ff282016-09-06 10:59:41 -070079 org.onosproject.sdnip.SdnIpFib.class.getName()
80 );
Jonathan Hartc22e8472015-11-17 18:25:45 -080081
Luca Prete83bac342016-12-06 19:42:05 -080082 private final List<ConfigFactory<?, ?>> factories = ImmutableList.of(
83 new ConfigFactory<ApplicationId, SdnIpConfig>(SubjectFactories.APP_SUBJECT_FACTORY,
84 SdnIpConfig.class, SdnIpConfig.CONFIG_KEY) {
85 @Override
86 public SdnIpConfig createConfig() {
87 return new SdnIpConfig();
88 }
89 });
90
Jonathan Hart039d2b12014-10-10 09:33:04 -070091 @Activate
Jonathan Hartd24fafb2015-02-09 17:55:32 -080092 protected void activate() {
Pavlin Radoslavova7243cc2014-11-22 21:38:02 -080093 appId = coreService.registerApplication(SDN_IP_APP);
Jonathan Hartdc711bd2014-10-15 11:24:23 -070094
Luca Prete83bac342016-12-06 19:42:05 -080095 factories.forEach(cfgRegistry::registerConfigFactory);
96
97 components.forEach(name -> componentService.activate(appId, name));
98
Pavlin Radoslavova7243cc2014-11-22 21:38:02 -080099 peerConnectivity = new PeerConnectivityManager(appId,
100 intentSynchronizer,
Jonathan Hart4cb39882015-08-12 23:50:55 -0400101 networkConfigService,
Jonathan Hart365335e2015-12-10 11:09:53 -0800102 coreService.registerApplication(RoutingService.ROUTER_APP_ID),
Jonathan Hart4cb39882015-08-12 23:50:55 -0400103 interfaceService);
Jonathan Hartdc711bd2014-10-15 11:24:23 -0700104 peerConnectivity.start();
105
Jonathan Hart3d8ff282016-09-06 10:59:41 -0700106 applicationService.registerDeactivateHook(appId,
107 () -> intentSynchronizer.removeIntentsByAppId(appId));
Pingping Linc07781f2015-10-30 00:44:41 -0700108
Jonathan Hart3d8ff282016-09-06 10:59:41 -0700109 log.info("Started");
Jonathan Hart039d2b12014-10-10 09:33:04 -0700110 }
111
112 @Deactivate
113 protected void deactivate() {
Jonathan Hartc22e8472015-11-17 18:25:45 -0800114 components.forEach(name -> componentService.deactivate(appId, name));
115
Luca Prete83bac342016-12-06 19:42:05 -0800116 factories.forEach(cfgRegistry::unregisterConfigFactory);
117
Pavlin Radoslavova071b1e2014-11-17 13:37:57 -0800118 peerConnectivity.stop();
Pavlin Radoslavov8b752442014-11-18 14:34:37 -0800119
Jonathan Hart3d8ff282016-09-06 10:59:41 -0700120 log.info("Stopped");
Jonathan Hart039d2b12014-10-10 09:33:04 -0700121 }
Jonathan Hart039d2b12014-10-10 09:33:04 -0700122}