blob: 1103736a3b736bcf2b8ae4bc04e917af25582f29 [file] [log] [blame]
Thomas Vachuska781d18b2014-10-27 10:31:25 -07001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2014-present Open Networking Foundation
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;
Ray Milkeye56c34d2017-08-03 13:39:30 -070027import org.onosproject.component.ComponentService;
Ray Milkeyfacf2862017-08-03 11:58:29 -070028import org.onosproject.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 Hart470ed4f2017-01-31 16:52:28 -080033import org.onosproject.intentsync.IntentSynchronizationService;
Jonathan Hart2da1e602015-02-18 19:09:24 -080034import org.onosproject.routing.RoutingService;
slowr8bbf77f2017-07-05 14:24:47 -070035import org.onosproject.routing.config.RoutingConfiguration;
Luca Prete83bac342016-12-06 19:42:05 -080036import org.onosproject.sdnip.config.SdnIpConfig;
Pavlin Radoslavova7243cc2014-11-22 21:38:02 -080037import org.slf4j.Logger;
Pavlin Radoslavov8b752442014-11-18 14:34:37 -080038
Jonathan Hartc22e8472015-11-17 18:25:45 -080039import java.util.List;
40
Jonathan Hart365335e2015-12-10 11:09:53 -080041import static org.slf4j.LoggerFactory.getLogger;
42
Jonathan Hart039d2b12014-10-10 09:33:04 -070043/**
Jonathan Hart0b04bed2014-10-16 16:39:19 -070044 * Component for the SDN-IP peering application.
Jonathan Hart039d2b12014-10-10 09:33:04 -070045 */
46@Component(immediate = true)
Jonathan Hart365335e2015-12-10 11:09:53 -080047public class SdnIp {
Jonathan Hart039d2b12014-10-10 09:33:04 -070048
Jonathan Hart365335e2015-12-10 11:09:53 -080049 public static final String SDN_IP_APP = "org.onosproject.sdnip";
Jonathan Hart039d2b12014-10-10 09:33:04 -070050 private final Logger log = getLogger(getClass());
51
Jonathan Hartdc711bd2014-10-15 11:24:23 -070052 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
Thomas Vachuskab97cf282014-10-20 23:31:12 -070053 protected CoreService coreService;
54
55 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
Pingping Linc07781f2015-10-30 00:44:41 -070056 protected ApplicationService applicationService;
57
58 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
Pavlin Radoslavov492cc3a2015-01-22 18:46:26 -080059 protected NetworkConfigService networkConfigService;
60
Jonathan Hart4cb39882015-08-12 23:50:55 -040061 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
62 protected InterfaceService interfaceService;
63
Jonathan Hart365335e2015-12-10 11:09:53 -080064 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
65 protected IntentSynchronizationService intentSynchronizer;
Jonathan Hart41349e92015-02-09 14:14:02 -080066
Jonathan Hart365335e2015-12-10 11:09:53 -080067 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
Luca Prete83bac342016-12-06 19:42:05 -080068 protected NetworkConfigRegistry cfgRegistry;
69
70 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
Jonathan Hartc22e8472015-11-17 18:25:45 -080071 protected ComponentService componentService;
72
Jonathan Hart365335e2015-12-10 11:09:53 -080073 private PeerConnectivityManager peerConnectivity;
74
Pavlin Radoslavovc91eebe2014-11-25 18:45:46 -080075 private ApplicationId appId;
Pavlin Radoslavov8b752442014-11-18 14:34:37 -080076
Jonathan Hart3d8ff282016-09-06 10:59:41 -070077 private final List<String> components = ImmutableList.of(
78 "org.onosproject.routing.bgp.BgpSessionManager",
Jonathan Harta9e29552016-09-09 07:17:41 -070079 "org.onosproject.routing.impl.BgpSpeakerNeighbourHandler",
Jonathan Hart3d8ff282016-09-06 10:59:41 -070080 org.onosproject.sdnip.SdnIpFib.class.getName()
81 );
Jonathan Hartc22e8472015-11-17 18:25:45 -080082
Luca Prete83bac342016-12-06 19:42:05 -080083 private final List<ConfigFactory<?, ?>> factories = ImmutableList.of(
84 new ConfigFactory<ApplicationId, SdnIpConfig>(SubjectFactories.APP_SUBJECT_FACTORY,
85 SdnIpConfig.class, SdnIpConfig.CONFIG_KEY) {
86 @Override
87 public SdnIpConfig createConfig() {
88 return new SdnIpConfig();
89 }
90 });
91
Jonathan Hart039d2b12014-10-10 09:33:04 -070092 @Activate
Jonathan Hartd24fafb2015-02-09 17:55:32 -080093 protected void activate() {
Pavlin Radoslavova7243cc2014-11-22 21:38:02 -080094 appId = coreService.registerApplication(SDN_IP_APP);
Jonathan Hartdc711bd2014-10-15 11:24:23 -070095
slowr8bbf77f2017-07-05 14:24:47 -070096 RoutingConfiguration.register(cfgRegistry);
97
Luca Prete83bac342016-12-06 19:42:05 -080098 factories.forEach(cfgRegistry::registerConfigFactory);
99
100 components.forEach(name -> componentService.activate(appId, name));
101
Pavlin Radoslavova7243cc2014-11-22 21:38:02 -0800102 peerConnectivity = new PeerConnectivityManager(appId,
103 intentSynchronizer,
Jonathan Hart4cb39882015-08-12 23:50:55 -0400104 networkConfigService,
Jonathan Hart365335e2015-12-10 11:09:53 -0800105 coreService.registerApplication(RoutingService.ROUTER_APP_ID),
Jonathan Hart4cb39882015-08-12 23:50:55 -0400106 interfaceService);
Jonathan Hartdc711bd2014-10-15 11:24:23 -0700107 peerConnectivity.start();
108
Jonathan Hart3d8ff282016-09-06 10:59:41 -0700109 applicationService.registerDeactivateHook(appId,
110 () -> intentSynchronizer.removeIntentsByAppId(appId));
Pingping Linc07781f2015-10-30 00:44:41 -0700111
Jonathan Hart3d8ff282016-09-06 10:59:41 -0700112 log.info("Started");
Jonathan Hart039d2b12014-10-10 09:33:04 -0700113 }
114
115 @Deactivate
116 protected void deactivate() {
Jonathan Hartc22e8472015-11-17 18:25:45 -0800117 components.forEach(name -> componentService.deactivate(appId, name));
118
slowr8bbf77f2017-07-05 14:24:47 -0700119 RoutingConfiguration.unregister(cfgRegistry);
120
Luca Prete83bac342016-12-06 19:42:05 -0800121 factories.forEach(cfgRegistry::unregisterConfigFactory);
122
Pavlin Radoslavova071b1e2014-11-17 13:37:57 -0800123 peerConnectivity.stop();
Pavlin Radoslavov8b752442014-11-18 14:34:37 -0800124
Jonathan Hart3d8ff282016-09-06 10:59:41 -0700125 log.info("Stopped");
Jonathan Hart039d2b12014-10-10 09:33:04 -0700126 }
Jonathan Hart039d2b12014-10-10 09:33:04 -0700127}