blob: 3cc77086ab87fd1d90f0bb287f21b30997b11fa1 [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 Hart335ef462014-10-16 08:20:46 -070015import org.onlab.onos.sdnip.RouteUpdate.Type;
Jonathan Hart0b04bed2014-10-16 16:39:19 -070016import org.onlab.onos.sdnip.bgp.BgpRouteEntry;
Jonathan Hartab63aac2014-10-16 08:52:55 -070017import org.onlab.onos.sdnip.bgp.BgpSessionManager;
Jonathan Hartbac07a02014-10-13 21:29:54 -070018import org.onlab.onos.sdnip.config.SdnIpConfigReader;
Jonathan Hart335ef462014-10-16 08:20:46 -070019import org.onlab.packet.IpAddress;
20import org.onlab.packet.IpPrefix;
Jonathan Hart039d2b12014-10-10 09:33:04 -070021import org.slf4j.Logger;
22
23/**
Jonathan Hart0b04bed2014-10-16 16:39:19 -070024 * Component for the SDN-IP peering application.
Jonathan Hart039d2b12014-10-10 09:33:04 -070025 */
26@Component(immediate = true)
Jonathan Hart0b04bed2014-10-16 16:39:19 -070027@Service
28public class SdnIp implements SdnIpService {
Jonathan Hart039d2b12014-10-10 09:33:04 -070029
30 private final Logger log = getLogger(getClass());
31
Jonathan Hartdc711bd2014-10-15 11:24:23 -070032 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
33 protected IntentService intentService;
34
35 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
36 protected HostService hostService;
37
Jonathan Hartbac07a02014-10-13 21:29:54 -070038 private SdnIpConfigReader config;
Jonathan Hartce430a42014-10-16 20:44:29 -070039 private PeerConnectivityManager peerConnectivity;
Jonathan Hart335ef462014-10-16 08:20:46 -070040 private Router router;
Jonathan Hartab63aac2014-10-16 08:52:55 -070041 private BgpSessionManager bgpSessionManager;
Jonathan Hartbac07a02014-10-13 21:29:54 -070042
Jonathan Hart039d2b12014-10-10 09:33:04 -070043 @Activate
44 protected void activate() {
45 log.debug("SDN-IP started");
Jonathan Hartbac07a02014-10-13 21:29:54 -070046
47 config = new SdnIpConfigReader();
48 config.init();
Jonathan Hartdc711bd2014-10-15 11:24:23 -070049
50 InterfaceService interfaceService = new HostServiceBasedInterfaceService(hostService);
51
Jonathan Hartce430a42014-10-16 20:44:29 -070052 peerConnectivity = new PeerConnectivityManager(config, interfaceService, intentService);
Jonathan Hartdc711bd2014-10-15 11:24:23 -070053 peerConnectivity.start();
54
Jonathan Hart335ef462014-10-16 08:20:46 -070055 router = new Router(intentService, hostService, config, interfaceService);
56 router.start();
57
Jonathan Hartab63aac2014-10-16 08:52:55 -070058 bgpSessionManager = new BgpSessionManager(router);
59 bgpSessionManager.startUp(2000); // TODO
60
Jonathan Hart335ef462014-10-16 08:20:46 -070061 // TODO need to disable link discovery on external ports
62
63 router.update(new RouteUpdate(Type.UPDATE, new RouteEntry(
64 IpPrefix.valueOf("172.16.20.0/24"),
65 IpAddress.valueOf("192.168.10.1"))));
Jonathan Hart039d2b12014-10-10 09:33:04 -070066 }
67
68 @Deactivate
69 protected void deactivate() {
70 log.info("Stopped");
71 }
Jonathan Hart0b04bed2014-10-16 16:39:19 -070072
73 @Override
74 public Collection<BgpRouteEntry> getBgpRoutes() {
75 return bgpSessionManager.getBgpRoutes();
76 }
77
78 @Override
79 public Collection<RouteEntry> getRoutes() {
80 return router.getRoutes();
81 }
Jonathan Hartce430a42014-10-16 20:44:29 -070082
83 static String dpidToUri(String dpid) {
84 return "of:" + dpid.replace(":", "");
85 }
Jonathan Hart039d2b12014-10-10 09:33:04 -070086}