blob: fedf58256ac952294c9a5cad2fb3781b8ef7c0fb [file] [log] [blame]
Thomas Vachuska781d18b2014-10-27 10:31:25 -07001/*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
Jonathan Hart039d2b12014-10-10 09:33:04 -070019package org.onlab.onos.sdnip;
20
21import static org.slf4j.LoggerFactory.getLogger;
22
Jonathan Hart0b04bed2014-10-16 16:39:19 -070023import java.util.Collection;
24
Jonathan Hart039d2b12014-10-10 09:33:04 -070025import org.apache.felix.scr.annotations.Activate;
26import org.apache.felix.scr.annotations.Component;
27import org.apache.felix.scr.annotations.Deactivate;
Jonathan Hartdc711bd2014-10-15 11:24:23 -070028import org.apache.felix.scr.annotations.Reference;
29import org.apache.felix.scr.annotations.ReferenceCardinality;
Jonathan Hart0b04bed2014-10-16 16:39:19 -070030import org.apache.felix.scr.annotations.Service;
Thomas Vachuskab97cf282014-10-20 23:31:12 -070031import org.onlab.onos.ApplicationId;
32import org.onlab.onos.CoreService;
Jonathan Hartdc711bd2014-10-15 11:24:23 -070033import org.onlab.onos.net.host.HostService;
34import org.onlab.onos.net.intent.IntentService;
Jonathan Hart0b04bed2014-10-16 16:39:19 -070035import org.onlab.onos.sdnip.bgp.BgpRouteEntry;
Jonathan Hartab63aac2014-10-16 08:52:55 -070036import org.onlab.onos.sdnip.bgp.BgpSessionManager;
Jonathan Hartbac07a02014-10-13 21:29:54 -070037import org.onlab.onos.sdnip.config.SdnIpConfigReader;
Jonathan Hart039d2b12014-10-10 09:33:04 -070038import org.slf4j.Logger;
39
40/**
Jonathan Hart0b04bed2014-10-16 16:39:19 -070041 * Component for the SDN-IP peering application.
Jonathan Hart039d2b12014-10-10 09:33:04 -070042 */
43@Component(immediate = true)
Jonathan Hart0b04bed2014-10-16 16:39:19 -070044@Service
45public class SdnIp implements SdnIpService {
Jonathan Hart039d2b12014-10-10 09:33:04 -070046
Jonathan Hart31582d12014-10-22 13:52:41 -070047 private static final String SDN_IP_APP = "org.onlab.onos.sdnip";
Thomas Vachuskab97cf282014-10-20 23:31:12 -070048
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)
Jonathan Hartdc711bd2014-10-15 11:24:23 -070055 protected IntentService intentService;
56
57 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
58 protected HostService hostService;
59
Jonathan Hartbac07a02014-10-13 21:29:54 -070060 private SdnIpConfigReader config;
Jonathan Hartce430a42014-10-16 20:44:29 -070061 private PeerConnectivityManager peerConnectivity;
Jonathan Hart335ef462014-10-16 08:20:46 -070062 private Router router;
Jonathan Hartab63aac2014-10-16 08:52:55 -070063 private BgpSessionManager bgpSessionManager;
Jonathan Hartbac07a02014-10-13 21:29:54 -070064
Jonathan Hart039d2b12014-10-10 09:33:04 -070065 @Activate
66 protected void activate() {
67 log.debug("SDN-IP started");
Jonathan Hartbac07a02014-10-13 21:29:54 -070068
69 config = new SdnIpConfigReader();
70 config.init();
Jonathan Hartdc711bd2014-10-15 11:24:23 -070071
Jonathan Hartce37f6d2014-10-20 10:25:03 -070072 InterfaceService interfaceService = new HostToInterfaceAdaptor(hostService);
Jonathan Hartdc711bd2014-10-15 11:24:23 -070073
Jonathan Hart31582d12014-10-22 13:52:41 -070074 ApplicationId appId = coreService.registerApplication(SDN_IP_APP);
75
76 peerConnectivity = new PeerConnectivityManager(appId, config,
77 interfaceService, intentService);
Jonathan Hartdc711bd2014-10-15 11:24:23 -070078 peerConnectivity.start();
79
Thomas Vachuskab97cf282014-10-20 23:31:12 -070080 router = new Router(appId, intentService, hostService, config, interfaceService);
Jonathan Hart335ef462014-10-16 08:20:46 -070081 router.start();
82
Jonathan Hartab63aac2014-10-16 08:52:55 -070083 bgpSessionManager = new BgpSessionManager(router);
84 bgpSessionManager.startUp(2000); // TODO
85
Jonathan Hart335ef462014-10-16 08:20:46 -070086 // TODO need to disable link discovery on external ports
Jonathan Hart4c2b15e2014-10-20 13:10:56 -070087
Jonathan Hart039d2b12014-10-10 09:33:04 -070088 }
89
90 @Deactivate
91 protected void deactivate() {
92 log.info("Stopped");
93 }
Jonathan Hart0b04bed2014-10-16 16:39:19 -070094
95 @Override
96 public Collection<BgpRouteEntry> getBgpRoutes() {
97 return bgpSessionManager.getBgpRoutes();
98 }
99
100 @Override
101 public Collection<RouteEntry> getRoutes() {
102 return router.getRoutes();
103 }
Jonathan Hartce430a42014-10-16 20:44:29 -0700104
105 static String dpidToUri(String dpid) {
106 return "of:" + dpid.replace(":", "");
107 }
Jonathan Hart039d2b12014-10-10 09:33:04 -0700108}