ONOS-1736 - Modified PacketManager to register packet request flows using the co…
…re app id, instead of the requesting app id. This is to prevent packet request flows from vanishing when app removes all its flows. This is a provisional fix until packet requests allow removal via reference counting or a similar tracking strategy. Change-Id: Ib0e53ae8c6b5ae030a9c17a34407a5897027127b
Showing
3 changed files
with
27 additions
and
18 deletions
... | @@ -24,8 +24,15 @@ import java.util.Set; | ... | @@ -24,8 +24,15 @@ import java.util.Set; |
24 | */ | 24 | */ |
25 | public interface CoreService { | 25 | public interface CoreService { |
26 | 26 | ||
27 | - public static final ProviderId CORE_PROVIDER_ID = | 27 | + /** |
28 | - new ProviderId("core", "org.onosproject.core"); | 28 | + * Name of the core "application". |
29 | + */ | ||
30 | + public static final String CORE_APP_NAME = "org.onosproject.core"; | ||
31 | + | ||
32 | + /** | ||
33 | + * Identifier of the core "provider". | ||
34 | + */ | ||
35 | + public static final ProviderId CORE_PROVIDER_ID = new ProviderId("core", CORE_APP_NAME); | ||
29 | 36 | ||
30 | /** | 37 | /** |
31 | * Returns the product version. | 38 | * Returns the product version. | ... | ... |
... | @@ -70,6 +70,7 @@ public class CoreManager implements CoreService { | ... | @@ -70,6 +70,7 @@ public class CoreManager implements CoreService { |
70 | 70 | ||
71 | @Activate | 71 | @Activate |
72 | public void activate() { | 72 | public void activate() { |
73 | + registerApplication(CORE_APP_NAME); | ||
73 | cfgService.registerProperties(getClass()); | 74 | cfgService.registerProperties(getClass()); |
74 | List<String> versionLines = Tools.slurp(VERSION_FILE); | 75 | List<String> versionLines = Tools.slurp(VERSION_FILE); |
75 | if (versionLines != null && !versionLines.isEmpty()) { | 76 | if (versionLines != null && !versionLines.isEmpty()) { | ... | ... |
... | @@ -22,6 +22,7 @@ import org.apache.felix.scr.annotations.Reference; | ... | @@ -22,6 +22,7 @@ import org.apache.felix.scr.annotations.Reference; |
22 | import org.apache.felix.scr.annotations.ReferenceCardinality; | 22 | import org.apache.felix.scr.annotations.ReferenceCardinality; |
23 | import org.apache.felix.scr.annotations.Service; | 23 | import org.apache.felix.scr.annotations.Service; |
24 | import org.onosproject.core.ApplicationId; | 24 | import org.onosproject.core.ApplicationId; |
25 | +import org.onosproject.core.CoreService; | ||
25 | import org.onosproject.net.Device; | 26 | import org.onosproject.net.Device; |
26 | import org.onosproject.net.device.DeviceEvent; | 27 | import org.onosproject.net.device.DeviceEvent; |
27 | import org.onosproject.net.device.DeviceListener; | 28 | import org.onosproject.net.device.DeviceListener; |
... | @@ -61,14 +62,17 @@ import static org.slf4j.LoggerFactory.getLogger; | ... | @@ -61,14 +62,17 @@ import static org.slf4j.LoggerFactory.getLogger; |
61 | @Component(immediate = true) | 62 | @Component(immediate = true) |
62 | @Service | 63 | @Service |
63 | public class PacketManager | 64 | public class PacketManager |
64 | -extends AbstractProviderRegistry<PacketProvider, PacketProviderService> | 65 | + extends AbstractProviderRegistry<PacketProvider, PacketProviderService> |
65 | -implements PacketService, PacketProviderRegistry { | 66 | + implements PacketService, PacketProviderRegistry { |
66 | 67 | ||
67 | private final Logger log = getLogger(getClass()); | 68 | private final Logger log = getLogger(getClass()); |
68 | 69 | ||
69 | private final PacketStoreDelegate delegate = new InternalStoreDelegate(); | 70 | private final PacketStoreDelegate delegate = new InternalStoreDelegate(); |
70 | 71 | ||
71 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | 72 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) |
73 | + private CoreService coreService; | ||
74 | + | ||
75 | + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
72 | private DeviceService deviceService; | 76 | private DeviceService deviceService; |
73 | 77 | ||
74 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | 78 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) |
... | @@ -81,8 +85,11 @@ implements PacketService, PacketProviderRegistry { | ... | @@ -81,8 +85,11 @@ implements PacketService, PacketProviderRegistry { |
81 | 85 | ||
82 | private final Map<Integer, PacketProcessor> processors = new ConcurrentHashMap<>(); | 86 | private final Map<Integer, PacketProcessor> processors = new ConcurrentHashMap<>(); |
83 | 87 | ||
88 | + private ApplicationId appId; | ||
89 | + | ||
84 | @Activate | 90 | @Activate |
85 | public void activate() { | 91 | public void activate() { |
92 | + appId = coreService.getAppId(CoreService.CORE_APP_NAME); | ||
86 | store.setDelegate(delegate); | 93 | store.setDelegate(delegate); |
87 | deviceService.addListener(deviceListener); | 94 | deviceService.addListener(deviceListener); |
88 | log.info("Started"); | 95 | log.info("Started"); |
... | @@ -153,7 +160,7 @@ implements PacketService, PacketProviderRegistry { | ... | @@ -153,7 +160,7 @@ implements PacketService, PacketProviderRegistry { |
153 | * Pushes flow rules to the device to request packets be sent to the | 160 | * Pushes flow rules to the device to request packets be sent to the |
154 | * controller. | 161 | * controller. |
155 | * | 162 | * |
156 | - * @param device the device to push the rules to | 163 | + * @param device the device to push the rules to |
157 | * @param request the packet request | 164 | * @param request the packet request |
158 | */ | 165 | */ |
159 | private void pushRule(Device device, PacketRequest request) { | 166 | private void pushRule(Device device, PacketRequest request) { |
... | @@ -162,16 +169,10 @@ implements PacketService, PacketProviderRegistry { | ... | @@ -162,16 +169,10 @@ implements PacketService, PacketProviderRegistry { |
162 | return; | 169 | return; |
163 | } | 170 | } |
164 | 171 | ||
165 | - TrafficTreatment treatment = DefaultTrafficTreatment.builder() | 172 | + TrafficTreatment treatment = DefaultTrafficTreatment.builder().punt().build(); |
166 | - .punt() | 173 | + FlowRule flow = new DefaultFlowRule(device.id(), request.selector(), treatment, |
167 | - .build(); | 174 | + request.priority().priorityValue(), |
168 | - | 175 | + appId, 0, true, request.tableType()); |
169 | - FlowRule flow = new DefaultFlowRule(device.id(), | ||
170 | - request.selector(), | ||
171 | - treatment, | ||
172 | - request.priority().priorityValue(), | ||
173 | - request.appId(), | ||
174 | - 0, true, request.tableType()); | ||
175 | 176 | ||
176 | flowService.applyFlowRules(flow); | 177 | flowService.applyFlowRules(flow); |
177 | } | 178 | } |
... | @@ -204,8 +205,8 @@ implements PacketService, PacketProviderRegistry { | ... | @@ -204,8 +205,8 @@ implements PacketService, PacketProviderRegistry { |
204 | 205 | ||
205 | // Personalized link provider service issued to the supplied provider. | 206 | // Personalized link provider service issued to the supplied provider. |
206 | private class InternalPacketProviderService | 207 | private class InternalPacketProviderService |
207 | - extends AbstractProviderService<PacketProvider> | 208 | + extends AbstractProviderService<PacketProvider> |
208 | - implements PacketProviderService { | 209 | + implements PacketProviderService { |
209 | 210 | ||
210 | protected InternalPacketProviderService(PacketProvider provider) { | 211 | protected InternalPacketProviderService(PacketProvider provider) { |
211 | super(provider); | 212 | super(provider); |
... | @@ -225,7 +226,7 @@ implements PacketService, PacketProviderRegistry { | ... | @@ -225,7 +226,7 @@ implements PacketService, PacketProviderRegistry { |
225 | * Internal callback from the packet store. | 226 | * Internal callback from the packet store. |
226 | */ | 227 | */ |
227 | private class InternalStoreDelegate | 228 | private class InternalStoreDelegate |
228 | - implements PacketStoreDelegate { | 229 | + implements PacketStoreDelegate { |
229 | @Override | 230 | @Override |
230 | public void notify(PacketEvent event) { | 231 | public void notify(PacketEvent event) { |
231 | localEmit(event.subject()); | 232 | localEmit(event.subject()); | ... | ... |
-
Please register or login to post a comment