blob: 529e60acfde2a15ffe0f61d48f330f414c857f90 [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;
Jonathan Hartdc711bd2014-10-15 11:24:23 -070013import org.onlab.onos.net.host.HostService;
14import org.onlab.onos.net.intent.IntentService;
Jonathan Hart0b04bed2014-10-16 16:39:19 -070015import org.onlab.onos.sdnip.bgp.BgpRouteEntry;
Jonathan Hartab63aac2014-10-16 08:52:55 -070016import org.onlab.onos.sdnip.bgp.BgpSessionManager;
Jonathan Hartbac07a02014-10-13 21:29:54 -070017import org.onlab.onos.sdnip.config.SdnIpConfigReader;
Jonathan Hart039d2b12014-10-10 09:33:04 -070018import org.slf4j.Logger;
19
20/**
Jonathan Hart0b04bed2014-10-16 16:39:19 -070021 * Component for the SDN-IP peering application.
Jonathan Hart039d2b12014-10-10 09:33:04 -070022 */
23@Component(immediate = true)
Jonathan Hart0b04bed2014-10-16 16:39:19 -070024@Service
25public class SdnIp implements SdnIpService {
Jonathan Hart039d2b12014-10-10 09:33:04 -070026
27 private final Logger log = getLogger(getClass());
28
Jonathan Hartdc711bd2014-10-15 11:24:23 -070029 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
30 protected IntentService intentService;
31
32 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
33 protected HostService hostService;
34
Jonathan Hartbac07a02014-10-13 21:29:54 -070035 private SdnIpConfigReader config;
Jonathan Hartce430a42014-10-16 20:44:29 -070036 private PeerConnectivityManager peerConnectivity;
Jonathan Hart335ef462014-10-16 08:20:46 -070037 private Router router;
Jonathan Hartab63aac2014-10-16 08:52:55 -070038 private BgpSessionManager bgpSessionManager;
Jonathan Hartbac07a02014-10-13 21:29:54 -070039
Jonathan Hart039d2b12014-10-10 09:33:04 -070040 @Activate
41 protected void activate() {
42 log.debug("SDN-IP started");
Jonathan Hartbac07a02014-10-13 21:29:54 -070043
44 config = new SdnIpConfigReader();
45 config.init();
Jonathan Hartdc711bd2014-10-15 11:24:23 -070046
Jonathan Hartce37f6d2014-10-20 10:25:03 -070047 InterfaceService interfaceService = new HostToInterfaceAdaptor(hostService);
Jonathan Hartdc711bd2014-10-15 11:24:23 -070048
Jonathan Hartce430a42014-10-16 20:44:29 -070049 peerConnectivity = new PeerConnectivityManager(config, interfaceService, intentService);
Jonathan Hartdc711bd2014-10-15 11:24:23 -070050 peerConnectivity.start();
51
Jonathan Hart335ef462014-10-16 08:20:46 -070052 router = new Router(intentService, hostService, config, interfaceService);
53 router.start();
54
Jonathan Hartab63aac2014-10-16 08:52:55 -070055 bgpSessionManager = new BgpSessionManager(router);
56 bgpSessionManager.startUp(2000); // TODO
57
Jonathan Hart335ef462014-10-16 08:20:46 -070058 // TODO need to disable link discovery on external ports
Jonathan Hart039d2b12014-10-10 09:33:04 -070059 }
60
61 @Deactivate
62 protected void deactivate() {
63 log.info("Stopped");
64 }
Jonathan Hart0b04bed2014-10-16 16:39:19 -070065
66 @Override
67 public Collection<BgpRouteEntry> getBgpRoutes() {
68 return bgpSessionManager.getBgpRoutes();
69 }
70
71 @Override
72 public Collection<RouteEntry> getRoutes() {
73 return router.getRoutes();
74 }
Jonathan Hartce430a42014-10-16 20:44:29 -070075
76 static String dpidToUri(String dpid) {
77 return "of:" + dpid.replace(":", "");
78 }
Jonathan Hart039d2b12014-10-10 09:33:04 -070079}