blob: c86e6bde9b9b8f1db7621b5072066faf1fb6a9f1 [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 Hart039d2b12014-10-10 09:33:04 -070018import org.apache.felix.scr.annotations.Activate;
19import org.apache.felix.scr.annotations.Component;
20import org.apache.felix.scr.annotations.Deactivate;
Jonathan Hartdc711bd2014-10-15 11:24:23 -070021import org.apache.felix.scr.annotations.Reference;
22import org.apache.felix.scr.annotations.ReferenceCardinality;
Pingping Linc07781f2015-10-30 00:44:41 -070023import org.onosproject.app.ApplicationService;
Brian O'Connorabafb502014-12-02 22:26:20 -080024import org.onosproject.core.ApplicationId;
25import org.onosproject.core.CoreService;
Jonathan Hartc22e8472015-11-17 18:25:45 -080026import org.onosproject.incubator.component.ComponentService;
Jonathan Hart4cb39882015-08-12 23:50:55 -040027import org.onosproject.incubator.net.intf.InterfaceService;
Pingping Linc07781f2015-10-30 00:44:41 -070028import org.onosproject.net.config.NetworkConfigService;
Jonathan Hart365335e2015-12-10 11:09:53 -080029import org.onosproject.routing.IntentSynchronizationAdminService;
Jonathan Hart9a426f82015-09-03 15:43:13 +020030import org.onosproject.routing.IntentSynchronizationService;
Jonathan Hart2da1e602015-02-18 19:09:24 -080031import org.onosproject.routing.RoutingService;
Pavlin Radoslavova7243cc2014-11-22 21:38:02 -080032import org.slf4j.Logger;
Pavlin Radoslavov8b752442014-11-18 14:34:37 -080033
Jonathan Hartc22e8472015-11-17 18:25:45 -080034import java.util.ArrayList;
35import java.util.List;
36
Jonathan Hart365335e2015-12-10 11:09:53 -080037import static org.slf4j.LoggerFactory.getLogger;
38
Jonathan Hart039d2b12014-10-10 09:33:04 -070039/**
Jonathan Hart0b04bed2014-10-16 16:39:19 -070040 * Component for the SDN-IP peering application.
Jonathan Hart039d2b12014-10-10 09:33:04 -070041 */
42@Component(immediate = true)
Jonathan Hart365335e2015-12-10 11:09:53 -080043public class SdnIp {
Jonathan Hart039d2b12014-10-10 09:33:04 -070044
Jonathan Hart365335e2015-12-10 11:09:53 -080045 public static final String SDN_IP_APP = "org.onosproject.sdnip";
Jonathan Hart039d2b12014-10-10 09:33:04 -070046 private final Logger log = getLogger(getClass());
47
Jonathan Hartdc711bd2014-10-15 11:24:23 -070048 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
Thomas Vachuskab97cf282014-10-20 23:31:12 -070049 protected CoreService coreService;
50
51 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
Pingping Linc07781f2015-10-30 00:44:41 -070052 protected ApplicationService applicationService;
53
54 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
Pavlin Radoslavov492cc3a2015-01-22 18:46:26 -080055 protected NetworkConfigService networkConfigService;
56
Jonathan Hart4cb39882015-08-12 23:50:55 -040057 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
58 protected InterfaceService interfaceService;
59
Jonathan Hart365335e2015-12-10 11:09:53 -080060 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
61 protected IntentSynchronizationService intentSynchronizer;
Jonathan Hart41349e92015-02-09 14:14:02 -080062
Jonathan Hart365335e2015-12-10 11:09:53 -080063 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
64 protected IntentSynchronizationAdminService intentSynchronizerAdmin;
65
Jonathan Hartc22e8472015-11-17 18:25:45 -080066 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
67 protected ComponentService componentService;
68
Jonathan Hart365335e2015-12-10 11:09:53 -080069 private PeerConnectivityManager peerConnectivity;
70
Pavlin Radoslavovc91eebe2014-11-25 18:45:46 -080071 private ApplicationId appId;
Pavlin Radoslavov8b752442014-11-18 14:34:37 -080072
Jonathan Hartc22e8472015-11-17 18:25:45 -080073 private static List<String> components = new ArrayList<>();
74 static {
75 components.add("org.onosproject.routing.bgp.BgpSessionManager");
76 components.add("org.onosproject.routing.impl.Router");
77 components.add(org.onosproject.sdnip.SdnIpFib.class.getName());
78 }
79
Jonathan Hart039d2b12014-10-10 09:33:04 -070080 @Activate
Jonathan Hartd24fafb2015-02-09 17:55:32 -080081 protected void activate() {
Jonathan Hartc22e8472015-11-17 18:25:45 -080082 components.forEach(name -> componentService.activate(appId, name));
83
Pavlin Radoslavova7243cc2014-11-22 21:38:02 -080084 appId = coreService.registerApplication(SDN_IP_APP);
Jonathan Hartdc711bd2014-10-15 11:24:23 -070085
Pavlin Radoslavova7243cc2014-11-22 21:38:02 -080086 peerConnectivity = new PeerConnectivityManager(appId,
87 intentSynchronizer,
Jonathan Hart4cb39882015-08-12 23:50:55 -040088 networkConfigService,
Jonathan Hart365335e2015-12-10 11:09:53 -080089 coreService.registerApplication(RoutingService.ROUTER_APP_ID),
Jonathan Hart4cb39882015-08-12 23:50:55 -040090 interfaceService);
Jonathan Hartdc711bd2014-10-15 11:24:23 -070091 peerConnectivity.start();
92
Jonathan Hart365335e2015-12-10 11:09:53 -080093 // TODO fix removing intents
Pingping Linc07781f2015-10-30 00:44:41 -070094 applicationService.registerDeactivateHook(appId,
Jonathan Hart365335e2015-12-10 11:09:53 -080095 intentSynchronizerAdmin::removeIntents);
Pingping Linc07781f2015-10-30 00:44:41 -070096
Jonathan Hart365335e2015-12-10 11:09:53 -080097 log.info("SDN-IP started");
Jonathan Hart039d2b12014-10-10 09:33:04 -070098 }
99
100 @Deactivate
101 protected void deactivate() {
Jonathan Hartc22e8472015-11-17 18:25:45 -0800102 components.forEach(name -> componentService.deactivate(appId, name));
103
Pavlin Radoslavova071b1e2014-11-17 13:37:57 -0800104 peerConnectivity.stop();
Pavlin Radoslavov8b752442014-11-18 14:34:37 -0800105
Pavlin Radoslavova7243cc2014-11-22 21:38:02 -0800106 log.info("SDN-IP Stopped");
Jonathan Hart039d2b12014-10-10 09:33:04 -0700107 }
Jonathan Hart0b04bed2014-10-16 16:39:19 -0700108
Jonathan Hart51372182014-12-03 21:32:34 -0800109 /**
110 * Converts DPIDs of the form xx:xx:xx:xx:xx:xx:xx to OpenFlow provider
111 * device URIs.
112 *
113 * @param dpid the DPID string to convert
114 * @return the URI string for this device
115 */
Jonathan Hartce430a42014-10-16 20:44:29 -0700116 static String dpidToUri(String dpid) {
117 return "of:" + dpid.replace(":", "");
118 }
Pavlin Radoslavov8b752442014-11-18 14:34:37 -0800119
Pavlin Radoslavov8b752442014-11-18 14:34:37 -0800120
Jonathan Hart039d2b12014-10-10 09:33:04 -0700121}