blob: 54aa9e520abe8dfdeb22e710affa4456ec56ac8c [file] [log] [blame]
Jonathan Hart039d2b12014-10-10 09:33:04 -07001package org.onlab.onos.sdnip;
2
3import static org.slf4j.LoggerFactory.getLogger;
4
Jonathan Hart0b04bed2014-10-16 16:39:19 -07005import java.util.Collection;
6
Jonathan Hart039d2b12014-10-10 09:33:04 -07007import org.apache.felix.scr.annotations.Activate;
8import org.apache.felix.scr.annotations.Component;
9import org.apache.felix.scr.annotations.Deactivate;
Jonathan Hartdc711bd2014-10-15 11:24:23 -070010import org.apache.felix.scr.annotations.Reference;
11import org.apache.felix.scr.annotations.ReferenceCardinality;
Jonathan Hart0b04bed2014-10-16 16:39:19 -070012import org.apache.felix.scr.annotations.Service;
Thomas Vachuskab97cf282014-10-20 23:31:12 -070013import org.onlab.onos.ApplicationId;
14import org.onlab.onos.CoreService;
Jonathan Hartdc711bd2014-10-15 11:24:23 -070015import org.onlab.onos.net.host.HostService;
16import org.onlab.onos.net.intent.IntentService;
Jonathan Hart0b04bed2014-10-16 16:39:19 -070017import org.onlab.onos.sdnip.bgp.BgpRouteEntry;
Jonathan Hartab63aac2014-10-16 08:52:55 -070018import org.onlab.onos.sdnip.bgp.BgpSessionManager;
Jonathan Hartbac07a02014-10-13 21:29:54 -070019import org.onlab.onos.sdnip.config.SdnIpConfigReader;
Jonathan Hart039d2b12014-10-10 09:33:04 -070020import org.slf4j.Logger;
21
22/**
Jonathan Hart0b04bed2014-10-16 16:39:19 -070023 * Component for the SDN-IP peering application.
Jonathan Hart039d2b12014-10-10 09:33:04 -070024 */
25@Component(immediate = true)
Jonathan Hart0b04bed2014-10-16 16:39:19 -070026@Service
27public class SdnIp implements SdnIpService {
Jonathan Hart039d2b12014-10-10 09:33:04 -070028
Thomas Vachuskab97cf282014-10-20 23:31:12 -070029 private static final String SDN_ID_APP = "org.onlab.onos.sdnip";
30
Jonathan Hart039d2b12014-10-10 09:33:04 -070031 private final Logger log = getLogger(getClass());
32
Jonathan Hartdc711bd2014-10-15 11:24:23 -070033 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
Thomas Vachuskab97cf282014-10-20 23:31:12 -070034 protected CoreService coreService;
35
36 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
Jonathan Hartdc711bd2014-10-15 11:24:23 -070037 protected IntentService intentService;
38
39 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
40 protected HostService hostService;
41
Jonathan Hartbac07a02014-10-13 21:29:54 -070042 private SdnIpConfigReader config;
Jonathan Hartce430a42014-10-16 20:44:29 -070043 private PeerConnectivityManager peerConnectivity;
Jonathan Hart335ef462014-10-16 08:20:46 -070044 private Router router;
Jonathan Hartab63aac2014-10-16 08:52:55 -070045 private BgpSessionManager bgpSessionManager;
Jonathan Hartbac07a02014-10-13 21:29:54 -070046
Jonathan Hart039d2b12014-10-10 09:33:04 -070047 @Activate
48 protected void activate() {
49 log.debug("SDN-IP started");
Jonathan Hartbac07a02014-10-13 21:29:54 -070050
51 config = new SdnIpConfigReader();
52 config.init();
Jonathan Hartdc711bd2014-10-15 11:24:23 -070053
Jonathan Hartce37f6d2014-10-20 10:25:03 -070054 InterfaceService interfaceService = new HostToInterfaceAdaptor(hostService);
Jonathan Hartdc711bd2014-10-15 11:24:23 -070055
Thomas Vachuskab97cf282014-10-20 23:31:12 -070056 ApplicationId appId = coreService.registerApplication(SDN_ID_APP);
57 peerConnectivity = new PeerConnectivityManager(appId, config, interfaceService, intentService);
Jonathan Hartdc711bd2014-10-15 11:24:23 -070058 peerConnectivity.start();
59
Thomas Vachuskab97cf282014-10-20 23:31:12 -070060 router = new Router(appId, intentService, hostService, config, interfaceService);
Jonathan Hart335ef462014-10-16 08:20:46 -070061 router.start();
62
Jonathan Hartab63aac2014-10-16 08:52:55 -070063 bgpSessionManager = new BgpSessionManager(router);
64 bgpSessionManager.startUp(2000); // TODO
65
Jonathan Hart335ef462014-10-16 08:20:46 -070066 // TODO need to disable link discovery on external ports
Jonathan Hart039d2b12014-10-10 09:33:04 -070067 }
68
69 @Deactivate
70 protected void deactivate() {
71 log.info("Stopped");
72 }
Jonathan Hart0b04bed2014-10-16 16:39:19 -070073
74 @Override
75 public Collection<BgpRouteEntry> getBgpRoutes() {
76 return bgpSessionManager.getBgpRoutes();
77 }
78
79 @Override
80 public Collection<RouteEntry> getRoutes() {
81 return router.getRoutes();
82 }
Jonathan Hartce430a42014-10-16 20:44:29 -070083
84 static String dpidToUri(String dpid) {
85 return "of:" + dpid.replace(":", "");
86 }
Jonathan Hart039d2b12014-10-10 09:33:04 -070087}