Charles Chan

CORD-77 Dynamic Access Agent Config

This commit depends on https://gerrit.opencord.org/#/c/56/

Change-Id: I6084621c36046ae8b6262cab52c49825d3e0d0d1
...@@ -2,12 +2,18 @@ COMPILE_DEPS = [ ...@@ -2,12 +2,18 @@ COMPILE_DEPS = [
2 '//lib:CORE_DEPS', 2 '//lib:CORE_DEPS',
3 '//lib:org.apache.karaf.shell.console', 3 '//lib:org.apache.karaf.shell.console',
4 '//lib:javax.ws.rs-api', 4 '//lib:javax.ws.rs-api',
5 + '//lib:cord-config',
5 '//cli:onos-cli', 6 '//cli:onos-cli',
6 '//core/store/serializers:onos-core-serializers', 7 '//core/store/serializers:onos-core-serializers',
7 '//incubator/api:onos-incubator-api', 8 '//incubator/api:onos-incubator-api',
8 '//utils/rest:onlab-rest', 9 '//utils/rest:onlab-rest',
9 ] 10 ]
10 11
12 +BUNDLES = [
13 + '//apps/segmentrouting:onos-apps-segmentrouting',
14 + '//lib:cord-config'
15 +]
16 +
11 TEST_DEPS = [ 17 TEST_DEPS = [
12 '//lib:TEST_ADAPTERS', 18 '//lib:TEST_ADAPTERS',
13 ] 19 ]
...@@ -21,5 +27,6 @@ onos_app ( ...@@ -21,5 +27,6 @@ onos_app (
21 title = 'Segment Routing App', 27 title = 'Segment Routing App',
22 category = 'Traffic Steering', 28 category = 'Traffic Steering',
23 url = 'http://onosproject.org', 29 url = 'http://onosproject.org',
30 + included_bundles = BUNDLES,
24 description = 'Segment routing application.', 31 description = 'Segment routing application.',
25 ) 32 )
......
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<!--
3 + ~ Copyright 2016-present Open Networking Laboratory
4 + ~
5 + ~ Licensed under the Apache License, Version 2.0 (the "License");
6 + ~ you may not use this file except in compliance with the License.
7 + ~ You may obtain a copy of the License at
8 + ~
9 + ~ http://www.apache.org/licenses/LICENSE-2.0
10 + ~
11 + ~ Unless required by applicable law or agreed to in writing, software
12 + ~ distributed under the License is distributed on an "AS IS" BASIS,
13 + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 + ~ See the License for the specific language governing permissions and
15 + ~ limitations under the License.
16 + -->
17 +<app name="org.onosproject.segmentrouting" origin="ON.Lab" version="${project.version}"
18 + title="Segment Routing App" category="Traffic Steering" url="http://onosproject.org"
19 + featuresRepo="mvn:${project.groupId}/${project.artifactId}/${project.version}/xml/features"
20 + features="${project.artifactId}" apps="">
21 + <description>${project.description}</description>
22 + <artifact>mvn:${project.groupId}/${project.artifactId}/${project.version}</artifact>
23 + <!-- TODO: Replace this with variable -->
24 + <artifact>mvn:org.opencord/cord-config/1.0-SNAPSHOT</artifact>
25 +</app>
1 +<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2 +<!--
3 + ~ Copyright 2016-present Open Networking Laboratory
4 + ~
5 + ~ Licensed under the Apache License, Version 2.0 (the "License");
6 + ~ you may not use this file except in compliance with the License.
7 + ~ You may obtain a copy of the License at
8 + ~
9 + ~ http://www.apache.org/licenses/LICENSE-2.0
10 + ~
11 + ~ Unless required by applicable law or agreed to in writing, software
12 + ~ distributed under the License is distributed on an "AS IS" BASIS,
13 + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 + ~ See the License for the specific language governing permissions and
15 + ~ limitations under the License.
16 + -->
17 +<features xmlns="http://karaf.apache.org/xmlns/features/v1.2.0" name="${project.artifactId}-${project.version}">
18 + <feature name="${project.artifactId}" version="${project.version}"
19 + description="${project.description}">
20 + <feature>onos-api</feature>
21 + <bundle>mvn:${project.groupId}/${project.artifactId}/${project.version}</bundle>
22 + <!-- TODO: Replace this with variable -->
23 + <bundle>mvn:org.opencord/cord-config/1.0-SNAPSHOT</bundle>
24 + </feature>
25 +</features>
...@@ -30,11 +30,6 @@ ...@@ -30,11 +30,6 @@
30 <description>Segment routing application</description> 30 <description>Segment routing application</description>
31 31
32 <properties> 32 <properties>
33 - <onos.app.name>org.onosproject.segmentrouting</onos.app.name>
34 - <onos.app.title>Segment Routing App</onos.app.title>
35 - <onos.app.category>Traffic Steering</onos.app.category>
36 - <onos.app.url>http://onosproject.org</onos.app.url>
37 - <onos.app.readme>Segment routing application.</onos.app.readme>
38 <web.context>/onos/segmentrouting</web.context> 33 <web.context>/onos/segmentrouting</web.context>
39 <api.version>1.0.0</api.version> 34 <api.version>1.0.0</api.version>
40 <api.title>ONOS Segment Routing REST API</api.title> 35 <api.title>ONOS Segment Routing REST API</api.title>
...@@ -70,6 +65,12 @@ ...@@ -70,6 +65,12 @@
70 <version>${project.version}</version> 65 <version>${project.version}</version>
71 </dependency> 66 </dependency>
72 <dependency> 67 <dependency>
68 + <groupId>org.opencord</groupId>
69 + <artifactId>cord-config</artifactId>
70 + <!-- TODO: Replace this with variable -->
71 + <version>1.0-SNAPSHOT</version>
72 + </dependency>
73 + <dependency>
73 <groupId>javax.ws.rs</groupId> 74 <groupId>javax.ws.rs</groupId>
74 <artifactId>javax.ws.rs-api</artifactId> 75 <artifactId>javax.ws.rs-api</artifactId>
75 <version>2.0.1</version> 76 <version>2.0.1</version>
......
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
4 + * 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
7 + *
8 + * 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.
15 + */
16 +
17 +package org.onosproject.segmentrouting;
18 +
19 +import com.google.common.collect.ImmutableSet;
20 +import org.onlab.packet.Ip4Prefix;
21 +import org.onlab.packet.MacAddress;
22 +import org.onlab.packet.VlanId;
23 +import org.onosproject.net.ConnectPoint;
24 +import org.onosproject.net.DefaultHost;
25 +import org.onosproject.net.DeviceId;
26 +import org.onosproject.net.Host;
27 +import org.onosproject.net.HostId;
28 +import org.onosproject.net.HostLocation;
29 +import org.onosproject.net.provider.ProviderId;
30 +import org.opencord.cordconfig.CordConfigEvent;
31 +import org.opencord.cordconfig.access.AccessAgentData;
32 +import org.slf4j.Logger;
33 +import org.slf4j.LoggerFactory;
34 +
35 +import java.util.Optional;
36 +
37 +/**
38 + * Handles access agent config event which is required for CORD integration.
39 + */
40 +public class CordConfigHandler {
41 + private static Logger log = LoggerFactory.getLogger(CordConfigHandler.class);
42 + private final SegmentRoutingManager srManager;
43 +
44 + /**
45 + * Constructs the CordConfigHandler.
46 + *
47 + * @param srManager Segment Routing manager
48 + */
49 + public CordConfigHandler(SegmentRoutingManager srManager) {
50 + this.srManager = srManager;
51 + }
52 +
53 + /**
54 + * Read initial access agent config for given device.
55 + *
56 + * @param deviceId ID of the device to be initialized
57 + */
58 + public void init(DeviceId deviceId) {
59 + // Try to read access agent config
60 + Optional<AccessAgentData> accessAgent =
61 + srManager.cordConfigService.getAccessAgent(deviceId);
62 +
63 + if (!accessAgent.isPresent()) {
64 + log.debug("No access agent config on {}. Skip.", deviceId);
65 + return;
66 + }
67 +
68 + processAccessAgentAdded(accessAgent.get());
69 + }
70 +
71 + // TODO javadoc
72 + protected void processAccessAgentAddedEvent(CordConfigEvent event) {
73 + log.debug("processAccessAgentAdded: {}, {}", event.subject(), event.prevSubject());
74 + processAccessAgentAdded((AccessAgentData) event.subject());
75 + }
76 +
77 + protected void processAccessAgentUpdatedEvent(CordConfigEvent event) {
78 + log.debug("processAccessAgentUpdated: {}, {}", event.subject(), event.prevSubject());
79 + processAccessAgentRemoved((AccessAgentData) event.prevSubject());
80 + processAccessAgentAdded((AccessAgentData) event.subject());
81 + }
82 +
83 + protected void processAccessAgentRemovedEvent(CordConfigEvent event) {
84 + log.debug("processAccessAgentRemoved: {}, {}", event.subject(), event.prevSubject());
85 + processAccessAgentRemoved((AccessAgentData) event.prevSubject());
86 + }
87 +
88 + protected void processAccessAgentAdded(AccessAgentData accessAgentData) {
89 + if (!srManager.mastershipService.isLocalMaster(accessAgentData.deviceId())) {
90 + log.debug("Not the master of {}. Abort.", accessAgentData.deviceId());
91 + return;
92 + }
93 +
94 + // Do not proceed if vtn location is missing
95 + if (!accessAgentData.getVtnLocation().isPresent()) {
96 + log.warn("accessAgentData does not contain vtn location. Abort.");
97 + return;
98 + }
99 +
100 + MacAddress agentMac = accessAgentData.getAgentMac();
101 + ConnectPoint agentLocation = accessAgentData.getVtnLocation().get();
102 +
103 + // Do not proceed if agent port doesn't have subnet configured
104 + Ip4Prefix agentSubnet = srManager.deviceConfiguration
105 + .getPortSubnet(agentLocation.deviceId(), agentLocation.port());
106 + if (agentSubnet == null) {
107 + log.warn("Agent port does not have subnet configuration. Abort.");
108 + return;
109 + }
110 +
111 + // Add host information for agent
112 + log.info("push host info for agent {}", agentMac);
113 + srManager.hostHandler.processHostAdded(createHost(agentMac, agentLocation));
114 +
115 + accessAgentData.getOltMacInfo().forEach((connectPoint, macAddress) -> {
116 + // Do not proceed if olt port has subnet configured
117 + Ip4Prefix oltSubnet = srManager.deviceConfiguration
118 + .getPortSubnet(connectPoint.deviceId(), connectPoint.port());
119 + if (oltSubnet != null) {
120 + log.warn("OLT port has subnet configuration. Abort.");
121 + return;
122 + }
123 +
124 + // Add olt to the subnet of agent
125 + log.info("push subnet for olt {}", agentSubnet);
126 + srManager.deviceConfiguration.addSubnet(connectPoint, agentSubnet);
127 + srManager.routingRulePopulator.populateRouterMacVlanFilters(connectPoint.deviceId());
128 +
129 + // Add host information for olt
130 + log.info("push host info for olt {}", macAddress);
131 + srManager.hostHandler.processHostAdded(createHost(macAddress, connectPoint));
132 + });
133 + }
134 +
135 + protected void processAccessAgentRemoved(AccessAgentData accessAgentData) {
136 + if (!srManager.mastershipService.isLocalMaster(accessAgentData.deviceId())) {
137 + log.debug("Not the master of {}. Abort.", accessAgentData.deviceId());
138 + return;
139 + }
140 +
141 + // Do not proceed if vtn location is missing
142 + if (!accessAgentData.getVtnLocation().isPresent()) {
143 + log.warn("accessAgentData does not contain vtn location. Abort.");
144 + return;
145 + }
146 +
147 + MacAddress agentMac = accessAgentData.getAgentMac();
148 + ConnectPoint agentLocation = accessAgentData.getVtnLocation().get();
149 +
150 + // Do not proceed if olt port doesn't have subnet configured
151 + Ip4Prefix agentSubnet = srManager.deviceConfiguration
152 + .getPortSubnet(agentLocation.deviceId(), agentLocation.port());
153 + if (agentSubnet == null) {
154 + log.warn("Agent port does not have subnet configuration. Abort.");
155 + return;
156 + }
157 +
158 + // Remove host information for agent
159 + log.info("delete host info for agent {}", agentMac);
160 + srManager.hostHandler.processHostRemoved(createHost(agentMac, agentLocation));
161 +
162 + accessAgentData.getOltMacInfo().forEach((connectPoint, macAddress) -> {
163 + // Do not proceed if agent port doesn't have subnet configured
164 + Ip4Prefix oltSubnet = srManager.deviceConfiguration
165 + .getPortSubnet(connectPoint.deviceId(), connectPoint.port());
166 + if (oltSubnet == null) {
167 + log.warn("OLT port does not have subnet configuration. Abort.");
168 + return;
169 + }
170 +
171 + // Remove host information for olt
172 + log.info("delete host info for olt {}", macAddress);
173 + srManager.hostHandler.processHostRemoved(createHost(macAddress, connectPoint));
174 +
175 + // Remove olt to the subnet of agent
176 + log.info("delete subnet for olt {}", agentSubnet);
177 + srManager.deviceConfiguration.removeSubnet(connectPoint, agentSubnet);
178 + srManager.routingRulePopulator.populateRouterMacVlanFilters(connectPoint.deviceId());
179 + });
180 + }
181 +
182 + private Host createHost(MacAddress macAddress, ConnectPoint location) {
183 + return new DefaultHost(
184 + new ProviderId("host", "org.onosproject.segmentrouting"),
185 + HostId.hostId(macAddress),
186 + macAddress,
187 + VlanId.NONE,
188 + new HostLocation(location, System.currentTimeMillis()),
189 + ImmutableSet.of());
190 + }
191 +}
...@@ -71,15 +71,15 @@ public class HostHandler { ...@@ -71,15 +71,15 @@ public class HostHandler {
71 if (!deviceId.equals(devId)) { 71 if (!deviceId.equals(devId)) {
72 return; 72 return;
73 } 73 }
74 - processHostAddedEventInternal(host); 74 + processHostAdded(host);
75 }); 75 });
76 } 76 }
77 77
78 protected void processHostAddedEvent(HostEvent event) { 78 protected void processHostAddedEvent(HostEvent event) {
79 - processHostAddedEventInternal(event.subject()); 79 + processHostAdded(event.subject());
80 } 80 }
81 81
82 - private void processHostAddedEventInternal(Host host) { 82 + protected void processHostAdded(Host host) {
83 MacAddress mac = host.mac(); 83 MacAddress mac = host.mac();
84 VlanId vlanId = host.vlan(); 84 VlanId vlanId = host.vlan();
85 HostLocation location = host.location(); 85 HostLocation location = host.location();
...@@ -116,15 +116,19 @@ public class HostHandler { ...@@ -116,15 +116,19 @@ public class HostHandler {
116 } 116 }
117 117
118 protected void processHostRemoveEvent(HostEvent event) { 118 protected void processHostRemoveEvent(HostEvent event) {
119 - MacAddress mac = event.subject().mac(); 119 + processHostRemoved(event.subject());
120 - VlanId vlanId = event.subject().vlan(); 120 + }
121 - HostLocation location = event.subject().location(); 121 +
122 + protected void processHostRemoved(Host host) {
123 + MacAddress mac = host.mac();
124 + VlanId vlanId = host.vlan();
125 + HostLocation location = host.location();
122 DeviceId deviceId = location.deviceId(); 126 DeviceId deviceId = location.deviceId();
123 PortNumber port = location.port(); 127 PortNumber port = location.port();
124 - Set<IpAddress> ips = event.subject().ipAddresses(); 128 + Set<IpAddress> ips = host.ipAddresses();
125 log.debug("Host {}/{} is removed from {}:{}", mac, vlanId, deviceId, port); 129 log.debug("Host {}/{} is removed from {}:{}", mac, vlanId, deviceId, port);
126 130
127 - if (accepted(event.subject())) { 131 + if (accepted(host)) {
128 // Revoke bridging table entry 132 // Revoke bridging table entry
129 ForwardingObjective.Builder fob = 133 ForwardingObjective.Builder fob =
130 hostFwdObjBuilder(deviceId, mac, vlanId, port); 134 hostFwdObjBuilder(deviceId, mac, vlanId, port);
...@@ -133,9 +137,9 @@ public class HostHandler { ...@@ -133,9 +137,9 @@ public class HostHandler {
133 return; 137 return;
134 } 138 }
135 ObjectiveContext context = new DefaultObjectiveContext( 139 ObjectiveContext context = new DefaultObjectiveContext(
136 - (objective) -> log.debug("Host rule for {} revoked", event.subject()), 140 + (objective) -> log.debug("Host rule for {} revoked", host),
137 (objective, error) -> 141 (objective, error) ->
138 - log.warn("Failed to revoke host rule for {}: {}", event.subject(), error)); 142 + log.warn("Failed to revoke host rule for {}: {}", host, error));
139 flowObjectiveService.forward(deviceId, fob.remove(context)); 143 flowObjectiveService.forward(deviceId, fob.remove(context));
140 144
141 // Revoke IP table entry 145 // Revoke IP table entry
......
...@@ -82,6 +82,9 @@ import org.onosproject.store.service.EventuallyConsistentMap; ...@@ -82,6 +82,9 @@ import org.onosproject.store.service.EventuallyConsistentMap;
82 import org.onosproject.store.service.EventuallyConsistentMapBuilder; 82 import org.onosproject.store.service.EventuallyConsistentMapBuilder;
83 import org.onosproject.store.service.StorageService; 83 import org.onosproject.store.service.StorageService;
84 import org.onosproject.store.service.WallClockTimestamp; 84 import org.onosproject.store.service.WallClockTimestamp;
85 +import org.opencord.cordconfig.CordConfigEvent;
86 +import org.opencord.cordconfig.CordConfigListener;
87 +import org.opencord.cordconfig.CordConfigService;
85 import org.slf4j.Logger; 88 import org.slf4j.Logger;
86 import org.slf4j.LoggerFactory; 89 import org.slf4j.LoggerFactory;
87 90
...@@ -147,6 +150,9 @@ public class SegmentRoutingManager implements SegmentRoutingService { ...@@ -147,6 +150,9 @@ public class SegmentRoutingManager implements SegmentRoutingService {
147 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 150 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
148 protected TopologyService topologyService; 151 protected TopologyService topologyService;
149 152
153 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
154 + protected CordConfigService cordConfigService;
155 +
150 protected ArpHandler arpHandler = null; 156 protected ArpHandler arpHandler = null;
151 protected IcmpHandler icmpHandler = null; 157 protected IcmpHandler icmpHandler = null;
152 protected IpHandler ipHandler = null; 158 protected IpHandler ipHandler = null;
...@@ -163,11 +169,13 @@ public class SegmentRoutingManager implements SegmentRoutingService { ...@@ -163,11 +169,13 @@ public class SegmentRoutingManager implements SegmentRoutingService {
163 private AppConfigHandler appCfgHandler = null; 169 private AppConfigHandler appCfgHandler = null;
164 protected XConnectHandler xConnectHandler = null; 170 protected XConnectHandler xConnectHandler = null;
165 private McastHandler mcastHandler = null; 171 private McastHandler mcastHandler = null;
166 - private HostHandler hostHandler = null; 172 + protected HostHandler hostHandler = null;
173 + private CordConfigHandler cordConfigHandler = null;
167 private InternalEventHandler eventHandler = new InternalEventHandler(); 174 private InternalEventHandler eventHandler = new InternalEventHandler();
168 private final InternalHostListener hostListener = new InternalHostListener(); 175 private final InternalHostListener hostListener = new InternalHostListener();
169 private final InternalConfigListener cfgListener = new InternalConfigListener(this); 176 private final InternalConfigListener cfgListener = new InternalConfigListener(this);
170 private final InternalMcastListener mcastListener = new InternalMcastListener(); 177 private final InternalMcastListener mcastListener = new InternalMcastListener();
178 + private final InternalCordConfigListener cordConfigListener = new InternalCordConfigListener();
171 179
172 private ScheduledExecutorService executorService = Executors 180 private ScheduledExecutorService executorService = Executors
173 .newScheduledThreadPool(1); 181 .newScheduledThreadPool(1);
...@@ -324,6 +332,7 @@ public class SegmentRoutingManager implements SegmentRoutingService { ...@@ -324,6 +332,7 @@ public class SegmentRoutingManager implements SegmentRoutingService {
324 xConnectHandler = new XConnectHandler(this); 332 xConnectHandler = new XConnectHandler(this);
325 mcastHandler = new McastHandler(this); 333 mcastHandler = new McastHandler(this);
326 hostHandler = new HostHandler(this); 334 hostHandler = new HostHandler(this);
335 + cordConfigHandler = new CordConfigHandler(this);
327 336
328 cfgService.addListener(cfgListener); 337 cfgService.addListener(cfgListener);
329 cfgService.registerConfigFactory(deviceConfigFactory); 338 cfgService.registerConfigFactory(deviceConfigFactory);
...@@ -335,6 +344,7 @@ public class SegmentRoutingManager implements SegmentRoutingService { ...@@ -335,6 +344,7 @@ public class SegmentRoutingManager implements SegmentRoutingService {
335 linkService.addListener(linkListener); 344 linkService.addListener(linkListener);
336 deviceService.addListener(deviceListener); 345 deviceService.addListener(deviceListener);
337 multicastRouteService.addListener(mcastListener); 346 multicastRouteService.addListener(mcastListener);
347 + cordConfigService.addListener(cordConfigListener);
338 348
339 // Request ARP packet-in 349 // Request ARP packet-in
340 TrafficSelector.Builder selector = DefaultTrafficSelector.builder(); 350 TrafficSelector.Builder selector = DefaultTrafficSelector.builder();
...@@ -379,6 +389,7 @@ public class SegmentRoutingManager implements SegmentRoutingService { ...@@ -379,6 +389,7 @@ public class SegmentRoutingManager implements SegmentRoutingService {
379 linkService.removeListener(linkListener); 389 linkService.removeListener(linkListener);
380 deviceService.removeListener(deviceListener); 390 deviceService.removeListener(deviceListener);
381 multicastRouteService.removeListener(mcastListener); 391 multicastRouteService.removeListener(mcastListener);
392 + cordConfigService.removeListener(cordConfigListener);
382 393
383 processor = null; 394 processor = null;
384 linkListener = null; 395 linkListener = null;
...@@ -394,7 +405,6 @@ public class SegmentRoutingManager implements SegmentRoutingService { ...@@ -394,7 +405,6 @@ public class SegmentRoutingManager implements SegmentRoutingService {
394 log.info("Stopped"); 405 log.info("Stopped");
395 } 406 }
396 407
397 -
398 @Override 408 @Override
399 public List<Tunnel> getTunnels() { 409 public List<Tunnel> getTunnels() {
400 return tunnelHandler.getTunnels(); 410 return tunnelHandler.getTunnels();
...@@ -818,6 +828,7 @@ public class SegmentRoutingManager implements SegmentRoutingService { ...@@ -818,6 +828,7 @@ public class SegmentRoutingManager implements SegmentRoutingService {
818 if (mastershipService.isLocalMaster(deviceId)) { 828 if (mastershipService.isLocalMaster(deviceId)) {
819 hostHandler.readInitialHosts(deviceId); 829 hostHandler.readInitialHosts(deviceId);
820 xConnectHandler.init(deviceId); 830 xConnectHandler.init(deviceId);
831 + cordConfigHandler.init(deviceId);
821 DefaultGroupHandler groupHandler = groupHandlerMap.get(deviceId); 832 DefaultGroupHandler groupHandler = groupHandlerMap.get(deviceId);
822 groupHandler.createGroupsFromSubnetConfig(); 833 groupHandler.createGroupsFromSubnetConfig();
823 routingRulePopulator.populateSubnetBroadcastRule(deviceId); 834 routingRulePopulator.populateSubnetBroadcastRule(deviceId);
...@@ -1000,4 +1011,26 @@ public class SegmentRoutingManager implements SegmentRoutingService { ...@@ -1000,4 +1011,26 @@ public class SegmentRoutingManager implements SegmentRoutingService {
1000 } 1011 }
1001 } 1012 }
1002 } 1013 }
1014 +
1015 + private class InternalCordConfigListener implements CordConfigListener {
1016 + @Override
1017 + public void event(CordConfigEvent event) {
1018 + switch (event.type()) {
1019 + case ACCESS_AGENT_ADDED:
1020 + cordConfigHandler.processAccessAgentAddedEvent(event);
1021 + break;
1022 + case ACCESS_AGENT_UPDATED:
1023 + cordConfigHandler.processAccessAgentUpdatedEvent(event);
1024 + break;
1025 + case ACCESS_AGENT_REMOVED:
1026 + cordConfigHandler.processAccessAgentRemovedEvent(event);
1027 + break;
1028 + case ACCESS_DEVICE_ADDED:
1029 + case ACCESS_DEVICE_UPDATED:
1030 + case ACCESS_DEVICE_REMOVED:
1031 + default:
1032 + break;
1033 + }
1034 + }
1035 + }
1003 } 1036 }
......
1 -# ***** This file was auto-generated at Wed Jun 01 17:23:09 PDT 2016. Do not edit this file manually. ***** 1 +# ***** This file was auto-generated at Wed Jun 15 12:09:22 PDT 2016. Do not edit this file manually. *****
2 osgi_feature_group( 2 osgi_feature_group(
3 name = 'COMPILE', 3 name = 'COMPILE',
4 visibility = ['PUBLIC'], 4 visibility = ['PUBLIC'],
...@@ -1202,6 +1202,15 @@ remote_jar ( ...@@ -1202,6 +1202,15 @@ remote_jar (
1202 ) 1202 )
1203 1203
1204 remote_jar ( 1204 remote_jar (
1205 + name = 'cord-config',
1206 + out = 'cord-config-1.0-20160615.190726-9.jar',
1207 + url = 'https://oss.sonatype.org/content/repositories/snapshots/org/opencord/cord-config/1.0-SNAPSHOT/cord-config-1.0-20160615.190726-9.jar',
1208 + sha1 = '790bc0cf8ffe3f872370dd197cf225e76d93002d',
1209 + maven_coords = 'org.opencord:cord-config:1.0-SNAPSHOT',
1210 + visibility = [ 'PUBLIC' ],
1211 +)
1212 +
1213 +remote_jar (
1205 name = 'openstack4j-core', 1214 name = 'openstack4j-core',
1206 out = 'openstack4j-core-2.11.jar', 1215 out = 'openstack4j-core-2.11.jar',
1207 url = 'mvn:org.pacesys:openstack4j-core:jar:2.11', 1216 url = 'mvn:org.pacesys:openstack4j-core:jar:2.11',
......
...@@ -221,6 +221,10 @@ ...@@ -221,6 +221,10 @@
221 "uri": "mvn:com.btisystems.mibbler.mibs:rfc:1.0-SNAPSHOT", 221 "uri": "mvn:com.btisystems.mibbler.mibs:rfc:1.0-SNAPSHOT",
222 "repo": "https://oss.sonatype.org/content/repositories/snapshots" 222 "repo": "https://oss.sonatype.org/content/repositories/snapshots"
223 }, 223 },
224 + "cord-config": {
225 + "uri": "mvn:org.opencord:cord-config:1.0-SNAPSHOT",
226 + "repo": "https://oss.sonatype.org/content/repositories/snapshots"
227 + },
224 // Openstack4j related jars 228 // Openstack4j related jars
225 "openstack4j-core": "mvn:org.pacesys:openstack4j-core:2.11", 229 "openstack4j-core": "mvn:org.pacesys:openstack4j-core:2.11",
226 "openstack4j-http-connector": "mvn:org.pacesys.openstack4j.connectors:openstack4j-http-connector:2.11", 230 "openstack4j-http-connector": "mvn:org.pacesys.openstack4j.connectors:openstack4j-http-connector:2.11",
......