Committed by
Gerrit Code Review
Refactor the logic on collecting OpenFlow message statistics
Change-Id: I34c209c0ca90cb094ed5f82c96a8a43d3519b807
Showing
21 changed files
with
157 additions
and
1032 deletions
| ... | @@ -65,13 +65,6 @@ public interface OpenFlowController { | ... | @@ -65,13 +65,6 @@ public interface OpenFlowController { |
| 65 | OpenFlowSwitch getEqualSwitch(Dpid dpid); | 65 | OpenFlowSwitch getEqualSwitch(Dpid dpid); |
| 66 | 66 | ||
| 67 | /** | 67 | /** |
| 68 | - * If this set to be true, all incoming events are monitored. | ||
| 69 | - * Other wise, only stats related incoming events are monitored | ||
| 70 | - * @param monitor monitoring flag | ||
| 71 | - */ | ||
| 72 | - void monitorAllEvents(boolean monitor); | ||
| 73 | - | ||
| 74 | - /** | ||
| 75 | * Register a listener for meta events that occur to OF | 68 | * Register a listener for meta events that occur to OF |
| 76 | * devices. | 69 | * devices. |
| 77 | * @param listener the listener to notify | 70 | * @param listener the listener to notify |
| ... | @@ -86,6 +79,20 @@ public interface OpenFlowController { | ... | @@ -86,6 +79,20 @@ public interface OpenFlowController { |
| 86 | void removeListener(OpenFlowSwitchListener listener); | 79 | void removeListener(OpenFlowSwitchListener listener); |
| 87 | 80 | ||
| 88 | /** | 81 | /** |
| 82 | + * Register a listener for all OF msg types. | ||
| 83 | + * | ||
| 84 | + * @param listener the listener to notify | ||
| 85 | + */ | ||
| 86 | + void addMessageListener(OpenFlowMessageListener listener); | ||
| 87 | + | ||
| 88 | + /** | ||
| 89 | + * Unregister a listener for all OF msg types. | ||
| 90 | + * | ||
| 91 | + * @param listener the listener to notify | ||
| 92 | + */ | ||
| 93 | + void removeMessageListener(OpenFlowMessageListener listener); | ||
| 94 | + | ||
| 95 | + /** | ||
| 89 | * Register a listener for packet events. | 96 | * Register a listener for packet events. |
| 90 | * @param priority the importance of this listener, lower values are more important | 97 | * @param priority the importance of this listener, lower values are more important |
| 91 | * @param listener the listener to notify | 98 | * @param listener the listener to notify | ... | ... |
| 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 | +package org.onosproject.openflow.controller; | ||
| 17 | + | ||
| 18 | +import org.projectfloodlight.openflow.protocol.OFMessage; | ||
| 19 | + | ||
| 20 | +import java.util.List; | ||
| 21 | + | ||
| 22 | +/** | ||
| 23 | + * Notifies providers about all OpenFlow messages. | ||
| 24 | + */ | ||
| 25 | +public interface OpenFlowMessageListener { | ||
| 26 | + | ||
| 27 | + /** | ||
| 28 | + * Handles all incoming OpenFlow messages. | ||
| 29 | + * | ||
| 30 | + * @param dpid the switch where the message generated | ||
| 31 | + * @param msg raw OpenFlow message | ||
| 32 | + */ | ||
| 33 | + void handleIncomingMessage(Dpid dpid, OFMessage msg); | ||
| 34 | + | ||
| 35 | + /** | ||
| 36 | + * Handles all outgoing OpenFlow messages. | ||
| 37 | + * | ||
| 38 | + * @param dpid the switch where the message to be sent | ||
| 39 | + * @param msgs a collection of raw OpenFlow message | ||
| 40 | + */ | ||
| 41 | + void handleOutgoingMessage(Dpid dpid, List<OFMessage> msgs); | ||
| 42 | +} |
| ... | @@ -157,18 +157,4 @@ public interface OpenFlowSwitch { | ... | @@ -157,18 +157,4 @@ public interface OpenFlowSwitch { |
| 157 | * @return string representation of the connection to the device | 157 | * @return string representation of the connection to the device |
| 158 | */ | 158 | */ |
| 159 | String channelId(); | 159 | String channelId(); |
| 160 | - | ||
| 161 | - /** | ||
| 162 | - * Registers a listener for OF msg events. | ||
| 163 | - * | ||
| 164 | - * @param listener the listener to notify | ||
| 165 | - */ | ||
| 166 | - void addEventListener(OpenFlowEventListener listener); | ||
| 167 | - | ||
| 168 | - /** | ||
| 169 | - * Unregisters a listener. | ||
| 170 | - * | ||
| 171 | - * @param listener the listener to unregister | ||
| 172 | - */ | ||
| 173 | - void removeEventListener(OpenFlowEventListener listener); | ||
| 174 | } | 160 | } | ... | ... |
| ... | @@ -22,7 +22,6 @@ import org.onlab.packet.IpAddress; | ... | @@ -22,7 +22,6 @@ import org.onlab.packet.IpAddress; |
| 22 | import org.onosproject.net.Device; | 22 | import org.onosproject.net.Device; |
| 23 | import org.onosproject.net.driver.AbstractHandlerBehaviour; | 23 | import org.onosproject.net.driver.AbstractHandlerBehaviour; |
| 24 | import org.onosproject.openflow.controller.Dpid; | 24 | import org.onosproject.openflow.controller.Dpid; |
| 25 | -import org.onosproject.openflow.controller.OpenFlowEventListener; | ||
| 26 | import org.onosproject.openflow.controller.RoleState; | 25 | import org.onosproject.openflow.controller.RoleState; |
| 27 | import org.projectfloodlight.openflow.protocol.OFDescStatsReply; | 26 | import org.projectfloodlight.openflow.protocol.OFDescStatsReply; |
| 28 | import org.projectfloodlight.openflow.protocol.OFErrorMsg; | 27 | import org.projectfloodlight.openflow.protocol.OFErrorMsg; |
| ... | @@ -37,7 +36,6 @@ import org.projectfloodlight.openflow.protocol.OFPortDescStatsReply; | ... | @@ -37,7 +36,6 @@ import org.projectfloodlight.openflow.protocol.OFPortDescStatsReply; |
| 37 | import org.projectfloodlight.openflow.protocol.OFPortStatus; | 36 | import org.projectfloodlight.openflow.protocol.OFPortStatus; |
| 38 | import org.projectfloodlight.openflow.protocol.OFRoleReply; | 37 | import org.projectfloodlight.openflow.protocol.OFRoleReply; |
| 39 | import org.projectfloodlight.openflow.protocol.OFRoleRequest; | 38 | import org.projectfloodlight.openflow.protocol.OFRoleRequest; |
| 40 | -import org.projectfloodlight.openflow.protocol.OFType; | ||
| 41 | import org.projectfloodlight.openflow.protocol.OFVersion; | 39 | import org.projectfloodlight.openflow.protocol.OFVersion; |
| 42 | import org.slf4j.Logger; | 40 | import org.slf4j.Logger; |
| 43 | import org.slf4j.LoggerFactory; | 41 | import org.slf4j.LoggerFactory; |
| ... | @@ -48,16 +46,10 @@ import java.net.SocketAddress; | ... | @@ -48,16 +46,10 @@ import java.net.SocketAddress; |
| 48 | import java.util.ArrayList; | 46 | import java.util.ArrayList; |
| 49 | import java.util.Collections; | 47 | import java.util.Collections; |
| 50 | import java.util.List; | 48 | import java.util.List; |
| 51 | -import java.util.Set; | ||
| 52 | -import java.util.concurrent.CopyOnWriteArraySet; | ||
| 53 | -import java.util.concurrent.ExecutorService; | ||
| 54 | -import java.util.concurrent.Executors; | ||
| 55 | import java.util.concurrent.atomic.AtomicInteger; | 49 | import java.util.concurrent.atomic.AtomicInteger; |
| 56 | import java.util.concurrent.atomic.AtomicReference; | 50 | import java.util.concurrent.atomic.AtomicReference; |
| 57 | import java.util.stream.Collectors; | 51 | import java.util.stream.Collectors; |
| 58 | 52 | ||
| 59 | -import static org.onlab.util.Tools.groupedThreads; | ||
| 60 | - | ||
| 61 | /** | 53 | /** |
| 62 | * An abstract representation of an OpenFlow switch. Can be extended by others | 54 | * An abstract representation of an OpenFlow switch. Can be extended by others |
| 63 | * to serve as a base for their vendor specific representation of a switch. | 55 | * to serve as a base for their vendor specific representation of a switch. |
| ... | @@ -90,11 +82,6 @@ public abstract class AbstractOpenFlowSwitch extends AbstractHandlerBehaviour | ... | @@ -90,11 +82,6 @@ public abstract class AbstractOpenFlowSwitch extends AbstractHandlerBehaviour |
| 90 | protected OFFeaturesReply features; | 82 | protected OFFeaturesReply features; |
| 91 | protected OFDescStatsReply desc; | 83 | protected OFDescStatsReply desc; |
| 92 | 84 | ||
| 93 | - protected Set<OpenFlowEventListener> ofOutgoingMsgListener = new CopyOnWriteArraySet<>(); | ||
| 94 | - | ||
| 95 | - protected ExecutorService executorMsgs = | ||
| 96 | - Executors.newCachedThreadPool(groupedThreads("onos/of", "event-outgoing-msg-stats-%d", log)); | ||
| 97 | - | ||
| 98 | // messagesPendingMastership is used as synchronization variable for | 85 | // messagesPendingMastership is used as synchronization variable for |
| 99 | // all mastership related changes. In this block, mastership (including | 86 | // all mastership related changes. In this block, mastership (including |
| 100 | // role update) will have either occurred or not. | 87 | // role update) will have either occurred or not. |
| ... | @@ -133,9 +120,9 @@ public abstract class AbstractOpenFlowSwitch extends AbstractHandlerBehaviour | ... | @@ -133,9 +120,9 @@ public abstract class AbstractOpenFlowSwitch extends AbstractHandlerBehaviour |
| 133 | a synchronization primitive, because the message would have just been | 120 | a synchronization primitive, because the message would have just been |
| 134 | dropped anyway. | 121 | dropped anyway. |
| 135 | */ | 122 | */ |
| 123 | + | ||
| 136 | if (role == RoleState.MASTER) { | 124 | if (role == RoleState.MASTER) { |
| 137 | // fast path send when we are master | 125 | // fast path send when we are master |
| 138 | - | ||
| 139 | sendMsgsOnChannel(msgs); | 126 | sendMsgsOnChannel(msgs); |
| 140 | return; | 127 | return; |
| 141 | } | 128 | } |
| ... | @@ -166,23 +153,10 @@ public abstract class AbstractOpenFlowSwitch extends AbstractHandlerBehaviour | ... | @@ -166,23 +153,10 @@ public abstract class AbstractOpenFlowSwitch extends AbstractHandlerBehaviour |
| 166 | } | 153 | } |
| 167 | } | 154 | } |
| 168 | 155 | ||
| 169 | - private void countOutgoingMsg(List<OFMessage> msgs) { | ||
| 170 | - // listen to outgoing control messages only if listeners are registered | ||
| 171 | - if (ofOutgoingMsgListener.size() != 0) { | ||
| 172 | - msgs.forEach(m -> { | ||
| 173 | - if (m.getType() == OFType.PACKET_OUT || | ||
| 174 | - m.getType() == OFType.FLOW_MOD || | ||
| 175 | - m.getType() == OFType.STATS_REQUEST) { | ||
| 176 | - executorMsgs.execute(new OFMessageHandler(dpid, m)); | ||
| 177 | - } | ||
| 178 | - }); | ||
| 179 | - } | ||
| 180 | - } | ||
| 181 | - | ||
| 182 | private void sendMsgsOnChannel(List<OFMessage> msgs) { | 156 | private void sendMsgsOnChannel(List<OFMessage> msgs) { |
| 183 | if (channel.isConnected()) { | 157 | if (channel.isConnected()) { |
| 184 | channel.write(msgs); | 158 | channel.write(msgs); |
| 185 | - countOutgoingMsg(msgs); | 159 | + agent.processDownstreamMessage(dpid, msgs); |
| 186 | } else { | 160 | } else { |
| 187 | log.warn("Dropping messages for switch {} because channel is not connected: {}", | 161 | log.warn("Dropping messages for switch {} because channel is not connected: {}", |
| 188 | dpid, msgs); | 162 | dpid, msgs); |
| ... | @@ -335,16 +309,6 @@ public abstract class AbstractOpenFlowSwitch extends AbstractHandlerBehaviour | ... | @@ -335,16 +309,6 @@ public abstract class AbstractOpenFlowSwitch extends AbstractHandlerBehaviour |
| 335 | } | 309 | } |
| 336 | 310 | ||
| 337 | @Override | 311 | @Override |
| 338 | - public void addEventListener(OpenFlowEventListener listener) { | ||
| 339 | - ofOutgoingMsgListener.add(listener); | ||
| 340 | - } | ||
| 341 | - | ||
| 342 | - @Override | ||
| 343 | - public void removeEventListener(OpenFlowEventListener listener) { | ||
| 344 | - ofOutgoingMsgListener.remove(listener); | ||
| 345 | - } | ||
| 346 | - | ||
| 347 | - @Override | ||
| 348 | public OFFactory factory() { | 312 | public OFFactory factory() { |
| 349 | return OFFactories.getFactory(ofVersion); | 313 | return OFFactories.getFactory(ofVersion); |
| 350 | } | 314 | } |
| ... | @@ -535,25 +499,4 @@ public abstract class AbstractOpenFlowSwitch extends AbstractHandlerBehaviour | ... | @@ -535,25 +499,4 @@ public abstract class AbstractOpenFlowSwitch extends AbstractHandlerBehaviour |
| 535 | ? channel.getRemoteAddress() : "?") | 499 | ? channel.getRemoteAddress() : "?") |
| 536 | + " DPID[" + ((getStringId() != null) ? getStringId() : "?") + "]]"; | 500 | + " DPID[" + ((getStringId() != null) ? getStringId() : "?") + "]]"; |
| 537 | } | 501 | } |
| 538 | - | ||
| 539 | - /** | ||
| 540 | - * OpenFlow message handler for outgoing control messages. | ||
| 541 | - */ | ||
| 542 | - protected final class OFMessageHandler implements Runnable { | ||
| 543 | - | ||
| 544 | - protected final OFMessage msg; | ||
| 545 | - protected final Dpid dpid; | ||
| 546 | - | ||
| 547 | - public OFMessageHandler(Dpid dpid, OFMessage msg) { | ||
| 548 | - this.msg = msg; | ||
| 549 | - this.dpid = dpid; | ||
| 550 | - } | ||
| 551 | - | ||
| 552 | - @Override | ||
| 553 | - public void run() { | ||
| 554 | - for (OpenFlowEventListener listener : ofOutgoingMsgListener) { | ||
| 555 | - listener.handleMessage(dpid, msg); | ||
| 556 | - } | ||
| 557 | - } | ||
| 558 | - } | ||
| 559 | } | 502 | } | ... | ... |
| ... | @@ -20,6 +20,8 @@ import org.onosproject.openflow.controller.OpenFlowSwitch; | ... | @@ -20,6 +20,8 @@ import org.onosproject.openflow.controller.OpenFlowSwitch; |
| 20 | import org.onosproject.openflow.controller.RoleState; | 20 | import org.onosproject.openflow.controller.RoleState; |
| 21 | import org.projectfloodlight.openflow.protocol.OFMessage; | 21 | import org.projectfloodlight.openflow.protocol.OFMessage; |
| 22 | 22 | ||
| 23 | +import java.util.List; | ||
| 24 | + | ||
| 23 | /** | 25 | /** |
| 24 | * Responsible for keeping track of the current set of switches | 26 | * Responsible for keeping track of the current set of switches |
| 25 | * connected to the system. As well as whether they are in Master | 27 | * connected to the system. As well as whether they are in Master |
| ... | @@ -84,6 +86,14 @@ public interface OpenFlowAgent { | ... | @@ -84,6 +86,14 @@ public interface OpenFlowAgent { |
| 84 | void removeConnectedSwitch(Dpid dpid); | 86 | void removeConnectedSwitch(Dpid dpid); |
| 85 | 87 | ||
| 86 | /** | 88 | /** |
| 89 | + * Notify OpenFlow message listeners on all outgoing message event. | ||
| 90 | + * | ||
| 91 | + * @param dpid the dpid the message sent to | ||
| 92 | + * @param m the collection of messages to sent out | ||
| 93 | + */ | ||
| 94 | + void processDownstreamMessage(Dpid dpid, List<OFMessage> m); | ||
| 95 | + | ||
| 96 | + /** | ||
| 87 | * Process a message coming from a switch. | 97 | * Process a message coming from a switch. |
| 88 | * | 98 | * |
| 89 | * @param dpid the dpid the message came on. | 99 | * @param dpid the dpid the message came on. | ... | ... |
| ... | @@ -52,15 +52,21 @@ public class OpenflowControllerAdapter implements OpenFlowController { | ... | @@ -52,15 +52,21 @@ public class OpenflowControllerAdapter implements OpenFlowController { |
| 52 | } | 52 | } |
| 53 | 53 | ||
| 54 | @Override | 54 | @Override |
| 55 | - public void monitorAllEvents(boolean monitor) { | 55 | + public void addListener(OpenFlowSwitchListener listener) { |
| 56 | } | 56 | } |
| 57 | 57 | ||
| 58 | @Override | 58 | @Override |
| 59 | - public void addListener(OpenFlowSwitchListener listener) { | 59 | + public void removeListener(OpenFlowSwitchListener listener) { |
| 60 | } | 60 | } |
| 61 | 61 | ||
| 62 | @Override | 62 | @Override |
| 63 | - public void removeListener(OpenFlowSwitchListener listener) { | 63 | + public void addMessageListener(OpenFlowMessageListener listener) { |
| 64 | + | ||
| 65 | + } | ||
| 66 | + | ||
| 67 | + @Override | ||
| 68 | + public void removeMessageListener(OpenFlowMessageListener listener) { | ||
| 69 | + | ||
| 64 | } | 70 | } |
| 65 | 71 | ||
| 66 | @Override | 72 | @Override | ... | ... |
| 1 | -/* | ||
| 2 | - * Copyright 2015-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 | -package org.onosproject.openflow.controller.driver; | ||
| 17 | - | ||
| 18 | -import org.jboss.netty.channel.Channel; | ||
| 19 | -import org.jboss.netty.channel.ChannelConfig; | ||
| 20 | -import org.jboss.netty.channel.ChannelFactory; | ||
| 21 | -import org.jboss.netty.channel.ChannelFuture; | ||
| 22 | -import org.jboss.netty.channel.ChannelPipeline; | ||
| 23 | -import org.junit.Before; | ||
| 24 | -import org.junit.Test; | ||
| 25 | -import org.onosproject.openflow.controller.Dpid; | ||
| 26 | -import org.onosproject.openflow.controller.OpenFlowEventListener; | ||
| 27 | -import org.onosproject.openflow.controller.RoleState; | ||
| 28 | -import org.projectfloodlight.openflow.protocol.OFMessage; | ||
| 29 | - | ||
| 30 | -import java.net.SocketAddress; | ||
| 31 | -import java.util.ArrayList; | ||
| 32 | -import java.util.List; | ||
| 33 | - | ||
| 34 | -import static org.hamcrest.MatcherAssert.assertThat; | ||
| 35 | -import static org.hamcrest.Matchers.hasSize; | ||
| 36 | -import static org.hamcrest.Matchers.is; | ||
| 37 | - | ||
| 38 | -/** | ||
| 39 | - * Tests for packet processing in the abstract openflow switch class. | ||
| 40 | - */ | ||
| 41 | -public class AbstractOpenFlowSwitchTest { | ||
| 42 | - | ||
| 43 | - OpenFlowSwitchImpl ofSwitch; | ||
| 44 | - TestExecutorService executorService; | ||
| 45 | - | ||
| 46 | - /** | ||
| 47 | - * Mock executor service that tracks submits. | ||
| 48 | - */ | ||
| 49 | - static class TestExecutorService extends ExecutorServiceAdapter { | ||
| 50 | - private List<OFMessage> submittedMessages = new ArrayList<>(); | ||
| 51 | - | ||
| 52 | - List<OFMessage> submittedMessages() { | ||
| 53 | - return submittedMessages; | ||
| 54 | - } | ||
| 55 | - | ||
| 56 | - @Override | ||
| 57 | - public void execute(Runnable task) { | ||
| 58 | - AbstractOpenFlowSwitch.OFMessageHandler handler = | ||
| 59 | - (AbstractOpenFlowSwitch.OFMessageHandler) task; | ||
| 60 | - submittedMessages.add(handler.msg); | ||
| 61 | - } | ||
| 62 | - } | ||
| 63 | - | ||
| 64 | - /** | ||
| 65 | - * Sets up switches to use as data. | ||
| 66 | - */ | ||
| 67 | - @Before | ||
| 68 | - public void setUp() { | ||
| 69 | - ofSwitch = new OpenFlowSwitchImpl(); | ||
| 70 | - | ||
| 71 | - executorService = new TestExecutorService(); | ||
| 72 | - ofSwitch.executorMsgs = executorService; | ||
| 73 | - Channel channel = new MockChannel(); | ||
| 74 | - ofSwitch.setChannel(channel); | ||
| 75 | - ofSwitch.role = RoleState.MASTER; | ||
| 76 | - ofSwitch.addEventListener(new OpenFlowEventListenerAdapter()); | ||
| 77 | - } | ||
| 78 | - | ||
| 79 | - /** | ||
| 80 | - * Tests a packet out operation. | ||
| 81 | - */ | ||
| 82 | - @Test | ||
| 83 | - public void testPacketOut() { | ||
| 84 | - OFMessage ofPacketOut = new MockOfPacketOut(); | ||
| 85 | - ofSwitch.sendMsg(ofPacketOut); | ||
| 86 | - assertThat(executorService.submittedMessages(), hasSize(1)); | ||
| 87 | - assertThat(executorService.submittedMessages().get(0), is(ofPacketOut)); | ||
| 88 | - } | ||
| 89 | - | ||
| 90 | - /** | ||
| 91 | - * Tests a flow mod operation. | ||
| 92 | - */ | ||
| 93 | - @Test | ||
| 94 | - public void testFlowMod() { | ||
| 95 | - OFMessage ofFlowMod = new MockOfFlowMod(); | ||
| 96 | - ofSwitch.sendMsg(ofFlowMod); | ||
| 97 | - assertThat(executorService.submittedMessages(), hasSize(1)); | ||
| 98 | - assertThat(executorService.submittedMessages().get(0), is(ofFlowMod)); | ||
| 99 | - } | ||
| 100 | - | ||
| 101 | - /** | ||
| 102 | - * Tests a stats request operation. | ||
| 103 | - */ | ||
| 104 | - @Test | ||
| 105 | - public void testStatsRequest() { | ||
| 106 | - OFMessage ofStatsRequest = new MockOfStatsRequest(); | ||
| 107 | - ofSwitch.sendMsg(ofStatsRequest); | ||
| 108 | - assertThat(executorService.submittedMessages(), hasSize(1)); | ||
| 109 | - assertThat(executorService.submittedMessages().get(0), is(ofStatsRequest)); | ||
| 110 | - } | ||
| 111 | - | ||
| 112 | - protected class OpenFlowSwitchImpl extends AbstractOpenFlowSwitch { | ||
| 113 | - | ||
| 114 | - @Override | ||
| 115 | - public Boolean supportNxRole() { | ||
| 116 | - return null; | ||
| 117 | - } | ||
| 118 | - | ||
| 119 | - @Override | ||
| 120 | - public void startDriverHandshake() { | ||
| 121 | - } | ||
| 122 | - | ||
| 123 | - @Override | ||
| 124 | - public boolean isDriverHandshakeComplete() { | ||
| 125 | - return false; | ||
| 126 | - } | ||
| 127 | - | ||
| 128 | - @Override | ||
| 129 | - public void processDriverHandshakeMessage(OFMessage m) { | ||
| 130 | - } | ||
| 131 | - } | ||
| 132 | - | ||
| 133 | - private class OpenFlowEventListenerAdapter implements OpenFlowEventListener { | ||
| 134 | - | ||
| 135 | - @Override | ||
| 136 | - public void handleMessage(Dpid dpid, OFMessage msg) { | ||
| 137 | - } | ||
| 138 | - } | ||
| 139 | - | ||
| 140 | - private class MockChannel implements Channel { | ||
| 141 | - | ||
| 142 | - @Override | ||
| 143 | - public Integer getId() { | ||
| 144 | - return null; | ||
| 145 | - } | ||
| 146 | - | ||
| 147 | - @Override | ||
| 148 | - public ChannelFactory getFactory() { | ||
| 149 | - return null; | ||
| 150 | - } | ||
| 151 | - | ||
| 152 | - @Override | ||
| 153 | - public Channel getParent() { | ||
| 154 | - return null; | ||
| 155 | - } | ||
| 156 | - | ||
| 157 | - @Override | ||
| 158 | - public ChannelConfig getConfig() { | ||
| 159 | - return null; | ||
| 160 | - } | ||
| 161 | - | ||
| 162 | - @Override | ||
| 163 | - public ChannelPipeline getPipeline() { | ||
| 164 | - return null; | ||
| 165 | - } | ||
| 166 | - | ||
| 167 | - @Override | ||
| 168 | - public boolean isOpen() { | ||
| 169 | - return false; | ||
| 170 | - } | ||
| 171 | - | ||
| 172 | - @Override | ||
| 173 | - public boolean isBound() { | ||
| 174 | - return false; | ||
| 175 | - } | ||
| 176 | - | ||
| 177 | - @Override | ||
| 178 | - public boolean isConnected() { | ||
| 179 | - // we assume that the channel is connected | ||
| 180 | - return true; | ||
| 181 | - } | ||
| 182 | - | ||
| 183 | - @Override | ||
| 184 | - public SocketAddress getLocalAddress() { | ||
| 185 | - return null; | ||
| 186 | - } | ||
| 187 | - | ||
| 188 | - @Override | ||
| 189 | - public SocketAddress getRemoteAddress() { | ||
| 190 | - return null; | ||
| 191 | - } | ||
| 192 | - | ||
| 193 | - @Override | ||
| 194 | - public ChannelFuture write(Object message) { | ||
| 195 | - return null; | ||
| 196 | - } | ||
| 197 | - | ||
| 198 | - @Override | ||
| 199 | - public ChannelFuture write(Object message, SocketAddress remoteAddress) { | ||
| 200 | - return null; | ||
| 201 | - } | ||
| 202 | - | ||
| 203 | - @Override | ||
| 204 | - public ChannelFuture bind(SocketAddress localAddress) { | ||
| 205 | - return null; | ||
| 206 | - } | ||
| 207 | - | ||
| 208 | - @Override | ||
| 209 | - public ChannelFuture connect(SocketAddress remoteAddress) { | ||
| 210 | - return null; | ||
| 211 | - } | ||
| 212 | - | ||
| 213 | - @Override | ||
| 214 | - public ChannelFuture disconnect() { | ||
| 215 | - return null; | ||
| 216 | - } | ||
| 217 | - | ||
| 218 | - @Override | ||
| 219 | - public ChannelFuture unbind() { | ||
| 220 | - return null; | ||
| 221 | - } | ||
| 222 | - | ||
| 223 | - @Override | ||
| 224 | - public ChannelFuture close() { | ||
| 225 | - return null; | ||
| 226 | - } | ||
| 227 | - | ||
| 228 | - @Override | ||
| 229 | - public ChannelFuture getCloseFuture() { | ||
| 230 | - return null; | ||
| 231 | - } | ||
| 232 | - | ||
| 233 | - @Override | ||
| 234 | - public int getInterestOps() { | ||
| 235 | - return 0; | ||
| 236 | - } | ||
| 237 | - | ||
| 238 | - @Override | ||
| 239 | - public boolean isReadable() { | ||
| 240 | - return false; | ||
| 241 | - } | ||
| 242 | - | ||
| 243 | - @Override | ||
| 244 | - public boolean isWritable() { | ||
| 245 | - return false; | ||
| 246 | - } | ||
| 247 | - | ||
| 248 | - @Override | ||
| 249 | - public ChannelFuture setInterestOps(int interestOps) { | ||
| 250 | - return null; | ||
| 251 | - } | ||
| 252 | - | ||
| 253 | - @Override | ||
| 254 | - public ChannelFuture setReadable(boolean readable) { | ||
| 255 | - return null; | ||
| 256 | - } | ||
| 257 | - | ||
| 258 | - @Override | ||
| 259 | - public boolean getUserDefinedWritability(int index) { | ||
| 260 | - return false; | ||
| 261 | - } | ||
| 262 | - | ||
| 263 | - @Override | ||
| 264 | - public void setUserDefinedWritability(int index, boolean isWritable) { | ||
| 265 | - | ||
| 266 | - } | ||
| 267 | - | ||
| 268 | - @Override | ||
| 269 | - public Object getAttachment() { | ||
| 270 | - return null; | ||
| 271 | - } | ||
| 272 | - | ||
| 273 | - @Override | ||
| 274 | - public void setAttachment(Object attachment) { | ||
| 275 | - | ||
| 276 | - } | ||
| 277 | - | ||
| 278 | - @Override | ||
| 279 | - public int compareTo(Channel o) { | ||
| 280 | - return 0; | ||
| 281 | - } | ||
| 282 | - } | ||
| 283 | -} |
| 1 | -/* | ||
| 2 | - * Copyright 2015-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 | -package org.onosproject.openflow.controller.driver; | ||
| 17 | - | ||
| 18 | -import java.util.Collection; | ||
| 19 | -import java.util.List; | ||
| 20 | -import java.util.concurrent.Callable; | ||
| 21 | -import java.util.concurrent.ExecutionException; | ||
| 22 | -import java.util.concurrent.ExecutorService; | ||
| 23 | -import java.util.concurrent.Future; | ||
| 24 | -import java.util.concurrent.TimeUnit; | ||
| 25 | -import java.util.concurrent.TimeoutException; | ||
| 26 | - | ||
| 27 | -/** | ||
| 28 | - * Test harness adapter for the ExecutorService. | ||
| 29 | - */ | ||
| 30 | -public class ExecutorServiceAdapter implements ExecutorService { | ||
| 31 | - @Override | ||
| 32 | - public void shutdown() { | ||
| 33 | - | ||
| 34 | - } | ||
| 35 | - | ||
| 36 | - @Override | ||
| 37 | - public List<Runnable> shutdownNow() { | ||
| 38 | - return null; | ||
| 39 | - } | ||
| 40 | - | ||
| 41 | - @Override | ||
| 42 | - public boolean isShutdown() { | ||
| 43 | - return false; | ||
| 44 | - } | ||
| 45 | - | ||
| 46 | - @Override | ||
| 47 | - public boolean isTerminated() { | ||
| 48 | - return false; | ||
| 49 | - } | ||
| 50 | - | ||
| 51 | - @Override | ||
| 52 | - public boolean awaitTermination(long timeout, TimeUnit unit) | ||
| 53 | - throws InterruptedException { | ||
| 54 | - return false; | ||
| 55 | - } | ||
| 56 | - | ||
| 57 | - @Override | ||
| 58 | - public <T> Future<T> submit(Callable<T> task) { | ||
| 59 | - return null; | ||
| 60 | - } | ||
| 61 | - | ||
| 62 | - @Override | ||
| 63 | - public <T> Future<T> submit(Runnable task, T result) { | ||
| 64 | - return null; | ||
| 65 | - } | ||
| 66 | - | ||
| 67 | - @Override | ||
| 68 | - public Future<?> submit(Runnable task) { | ||
| 69 | - return null; | ||
| 70 | - } | ||
| 71 | - | ||
| 72 | - @Override | ||
| 73 | - public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks) | ||
| 74 | - throws InterruptedException { | ||
| 75 | - return null; | ||
| 76 | - } | ||
| 77 | - | ||
| 78 | - @Override | ||
| 79 | - public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit) | ||
| 80 | - throws InterruptedException { | ||
| 81 | - return null; | ||
| 82 | - } | ||
| 83 | - | ||
| 84 | - @Override | ||
| 85 | - public <T> T invokeAny(Collection<? extends Callable<T>> tasks) throws InterruptedException, ExecutionException { | ||
| 86 | - return null; | ||
| 87 | - } | ||
| 88 | - | ||
| 89 | - @Override | ||
| 90 | - public <T> T invokeAny(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit) | ||
| 91 | - throws InterruptedException, ExecutionException, TimeoutException { | ||
| 92 | - return null; | ||
| 93 | - } | ||
| 94 | - | ||
| 95 | - @Override | ||
| 96 | - public void execute(Runnable command) { | ||
| 97 | - | ||
| 98 | - } | ||
| 99 | -} |
| 1 | -/* | ||
| 2 | - * Copyright 2015-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 | -package org.onosproject.openflow.controller.driver; | ||
| 17 | - | ||
| 18 | - | ||
| 19 | -import org.projectfloodlight.openflow.protocol.OFFlowMod; | ||
| 20 | -import org.projectfloodlight.openflow.protocol.OFFlowModCommand; | ||
| 21 | -import org.projectfloodlight.openflow.protocol.OFType; | ||
| 22 | -import org.projectfloodlight.openflow.protocol.OFFlowModFlags; | ||
| 23 | -import org.projectfloodlight.openflow.protocol.action.OFAction; | ||
| 24 | -import org.projectfloodlight.openflow.protocol.instruction.OFInstruction; | ||
| 25 | -import org.projectfloodlight.openflow.protocol.match.Match; | ||
| 26 | -import org.projectfloodlight.openflow.types.OFBufferId; | ||
| 27 | -import org.projectfloodlight.openflow.types.OFPort; | ||
| 28 | -import org.projectfloodlight.openflow.types.TableId; | ||
| 29 | -import org.projectfloodlight.openflow.types.U64; | ||
| 30 | -import org.projectfloodlight.openflow.types.OFGroup; | ||
| 31 | - | ||
| 32 | -import java.util.List; | ||
| 33 | -import java.util.Set; | ||
| 34 | - | ||
| 35 | -/** | ||
| 36 | - * Mock of the Open Flow flow mod message. | ||
| 37 | - */ | ||
| 38 | -public class MockOfFlowMod extends OfMessageAdapter implements OFFlowMod { | ||
| 39 | - | ||
| 40 | - public MockOfFlowMod() { | ||
| 41 | - super(OFType.FLOW_MOD); | ||
| 42 | - } | ||
| 43 | - | ||
| 44 | - @Override | ||
| 45 | - public U64 getCookie() { | ||
| 46 | - return null; | ||
| 47 | - } | ||
| 48 | - | ||
| 49 | - @Override | ||
| 50 | - public U64 getCookieMask() throws UnsupportedOperationException { | ||
| 51 | - return null; | ||
| 52 | - } | ||
| 53 | - | ||
| 54 | - @Override | ||
| 55 | - public TableId getTableId() throws UnsupportedOperationException { | ||
| 56 | - return null; | ||
| 57 | - } | ||
| 58 | - | ||
| 59 | - @Override | ||
| 60 | - public OFFlowModCommand getCommand() { | ||
| 61 | - return null; | ||
| 62 | - } | ||
| 63 | - | ||
| 64 | - @Override | ||
| 65 | - public int getIdleTimeout() { | ||
| 66 | - return 0; | ||
| 67 | - } | ||
| 68 | - | ||
| 69 | - @Override | ||
| 70 | - public int getHardTimeout() { | ||
| 71 | - return 0; | ||
| 72 | - } | ||
| 73 | - | ||
| 74 | - @Override | ||
| 75 | - public int getPriority() { | ||
| 76 | - return 0; | ||
| 77 | - } | ||
| 78 | - | ||
| 79 | - @Override | ||
| 80 | - public OFBufferId getBufferId() { | ||
| 81 | - return null; | ||
| 82 | - } | ||
| 83 | - | ||
| 84 | - @Override | ||
| 85 | - public OFPort getOutPort() { | ||
| 86 | - return null; | ||
| 87 | - } | ||
| 88 | - | ||
| 89 | - @Override | ||
| 90 | - public OFGroup getOutGroup() throws UnsupportedOperationException { | ||
| 91 | - return null; | ||
| 92 | - } | ||
| 93 | - | ||
| 94 | - @Override | ||
| 95 | - public Set<OFFlowModFlags> getFlags() { | ||
| 96 | - return null; | ||
| 97 | - } | ||
| 98 | - | ||
| 99 | - @Override | ||
| 100 | - public Match getMatch() { | ||
| 101 | - return null; | ||
| 102 | - } | ||
| 103 | - | ||
| 104 | - @Override | ||
| 105 | - public List<OFInstruction> getInstructions() throws UnsupportedOperationException { | ||
| 106 | - return null; | ||
| 107 | - } | ||
| 108 | - | ||
| 109 | - @Override | ||
| 110 | - public List<OFAction> getActions() throws UnsupportedOperationException { | ||
| 111 | - return null; | ||
| 112 | - } | ||
| 113 | - | ||
| 114 | - @Override | ||
| 115 | - public OFFlowMod.Builder createBuilder() { | ||
| 116 | - return null; | ||
| 117 | - } | ||
| 118 | -} |
| 1 | -/* | ||
| 2 | - * Copyright 2015-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 | -package org.onosproject.openflow.controller.driver; | ||
| 17 | - | ||
| 18 | -import org.projectfloodlight.openflow.protocol.OFPacketOut; | ||
| 19 | -import org.projectfloodlight.openflow.protocol.OFType; | ||
| 20 | -import org.projectfloodlight.openflow.protocol.action.OFAction; | ||
| 21 | -import org.projectfloodlight.openflow.types.OFBufferId; | ||
| 22 | -import org.projectfloodlight.openflow.types.OFPort; | ||
| 23 | - | ||
| 24 | -import java.util.List; | ||
| 25 | - | ||
| 26 | -/** | ||
| 27 | - * Mock of the Open Flow packet out message. | ||
| 28 | - */ | ||
| 29 | -public class MockOfPacketOut extends OfMessageAdapter implements OFPacketOut { | ||
| 30 | - | ||
| 31 | - public MockOfPacketOut() { | ||
| 32 | - super(OFType.PACKET_OUT); | ||
| 33 | - } | ||
| 34 | - | ||
| 35 | - @Override | ||
| 36 | - public OFBufferId getBufferId() { | ||
| 37 | - return null; | ||
| 38 | - } | ||
| 39 | - | ||
| 40 | - @Override | ||
| 41 | - public OFPort getInPort() { | ||
| 42 | - return null; | ||
| 43 | - } | ||
| 44 | - | ||
| 45 | - @Override | ||
| 46 | - public List<OFAction> getActions() { | ||
| 47 | - return null; | ||
| 48 | - } | ||
| 49 | - | ||
| 50 | - @Override | ||
| 51 | - public byte[] getData() { | ||
| 52 | - return new byte[0]; | ||
| 53 | - } | ||
| 54 | - | ||
| 55 | - @Override | ||
| 56 | - public OFPacketOut.Builder createBuilder() { | ||
| 57 | - return null; | ||
| 58 | - } | ||
| 59 | -} |
| 1 | -/* | ||
| 2 | - * Copyright 2015-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 | -package org.onosproject.openflow.controller.driver; | ||
| 17 | - | ||
| 18 | - | ||
| 19 | - | ||
| 20 | -import org.projectfloodlight.openflow.protocol.OFStatsRequest; | ||
| 21 | -import org.projectfloodlight.openflow.protocol.OFStatsType; | ||
| 22 | -import org.projectfloodlight.openflow.protocol.OFType; | ||
| 23 | -import org.projectfloodlight.openflow.protocol.OFStatsReplyFlags; | ||
| 24 | - | ||
| 25 | -import java.util.Set; | ||
| 26 | - | ||
| 27 | -/** | ||
| 28 | - * Mock of the Open Flow stats request message. | ||
| 29 | - */ | ||
| 30 | -public class MockOfStatsRequest extends OfMessageAdapter implements OFStatsRequest { | ||
| 31 | - | ||
| 32 | - public MockOfStatsRequest() { | ||
| 33 | - super(OFType.STATS_REQUEST); | ||
| 34 | - } | ||
| 35 | - | ||
| 36 | - @Override | ||
| 37 | - public OFStatsType getStatsType() { | ||
| 38 | - return null; | ||
| 39 | - } | ||
| 40 | - | ||
| 41 | - @Override | ||
| 42 | - public Set<OFStatsReplyFlags> getFlags() { | ||
| 43 | - return null; | ||
| 44 | - } | ||
| 45 | - | ||
| 46 | - @Override | ||
| 47 | - public OFStatsRequest.Builder createBuilder() { | ||
| 48 | - return null; | ||
| 49 | - } | ||
| 50 | -} |
| 1 | -/* | ||
| 2 | - * Copyright 2015-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 | -package org.onosproject.openflow.controller.driver; | ||
| 17 | - | ||
| 18 | -import org.jboss.netty.buffer.ChannelBuffer; | ||
| 19 | -import org.projectfloodlight.openflow.protocol.OFMessage; | ||
| 20 | -import org.projectfloodlight.openflow.protocol.OFType; | ||
| 21 | -import org.projectfloodlight.openflow.protocol.OFVersion; | ||
| 22 | - | ||
| 23 | -import com.google.common.hash.PrimitiveSink; | ||
| 24 | - | ||
| 25 | -/** | ||
| 26 | - * Adapter for testing against an OpenFlow message. | ||
| 27 | - */ | ||
| 28 | -public class OfMessageAdapter implements OFMessage { | ||
| 29 | - OFType type; | ||
| 30 | - | ||
| 31 | - private OfMessageAdapter() {} | ||
| 32 | - | ||
| 33 | - public OfMessageAdapter(OFType type) { | ||
| 34 | - this.type = type; | ||
| 35 | - } | ||
| 36 | - | ||
| 37 | - @Override | ||
| 38 | - public OFType getType() { | ||
| 39 | - return type; | ||
| 40 | - } | ||
| 41 | - | ||
| 42 | - @Override | ||
| 43 | - public OFVersion getVersion() { | ||
| 44 | - return null; | ||
| 45 | - } | ||
| 46 | - | ||
| 47 | - @Override | ||
| 48 | - public long getXid() { | ||
| 49 | - return 0; | ||
| 50 | - } | ||
| 51 | - | ||
| 52 | - @Override | ||
| 53 | - public void writeTo(ChannelBuffer channelBuffer) { } | ||
| 54 | - | ||
| 55 | - @Override | ||
| 56 | - public Builder createBuilder() { | ||
| 57 | - return null; | ||
| 58 | - } | ||
| 59 | - | ||
| 60 | - @Override | ||
| 61 | - public void putTo(PrimitiveSink sink) { } | ||
| 62 | -} |
| ... | @@ -34,6 +34,7 @@ import org.onosproject.openflow.controller.DefaultOpenFlowPacketContext; | ... | @@ -34,6 +34,7 @@ import org.onosproject.openflow.controller.DefaultOpenFlowPacketContext; |
| 34 | import org.onosproject.openflow.controller.Dpid; | 34 | import org.onosproject.openflow.controller.Dpid; |
| 35 | import org.onosproject.openflow.controller.OpenFlowController; | 35 | import org.onosproject.openflow.controller.OpenFlowController; |
| 36 | import org.onosproject.openflow.controller.OpenFlowEventListener; | 36 | import org.onosproject.openflow.controller.OpenFlowEventListener; |
| 37 | +import org.onosproject.openflow.controller.OpenFlowMessageListener; | ||
| 37 | import org.onosproject.openflow.controller.OpenFlowPacketContext; | 38 | import org.onosproject.openflow.controller.OpenFlowPacketContext; |
| 38 | import org.onosproject.openflow.controller.OpenFlowSwitch; | 39 | import org.onosproject.openflow.controller.OpenFlowSwitch; |
| 39 | import org.onosproject.openflow.controller.OpenFlowSwitchListener; | 40 | import org.onosproject.openflow.controller.OpenFlowSwitchListener; |
| ... | @@ -134,7 +135,7 @@ public class OpenFlowControllerImpl implements OpenFlowController { | ... | @@ -134,7 +135,7 @@ public class OpenFlowControllerImpl implements OpenFlowController { |
| 134 | 135 | ||
| 135 | protected Set<OpenFlowEventListener> ofEventListener = new CopyOnWriteArraySet<>(); | 136 | protected Set<OpenFlowEventListener> ofEventListener = new CopyOnWriteArraySet<>(); |
| 136 | 137 | ||
| 137 | - protected boolean monitorAllEvents = false; | 138 | + protected Set<OpenFlowMessageListener> ofMessageListener = new CopyOnWriteArraySet<>(); |
| 138 | 139 | ||
| 139 | protected Multimap<Dpid, OFFlowStatsEntry> fullFlowStats = | 140 | protected Multimap<Dpid, OFFlowStatsEntry> fullFlowStats = |
| 140 | ArrayListMultimap.create(); | 141 | ArrayListMultimap.create(); |
| ... | @@ -217,11 +218,6 @@ public class OpenFlowControllerImpl implements OpenFlowController { | ... | @@ -217,11 +218,6 @@ public class OpenFlowControllerImpl implements OpenFlowController { |
| 217 | } | 218 | } |
| 218 | 219 | ||
| 219 | @Override | 220 | @Override |
| 220 | - public void monitorAllEvents(boolean monitor) { | ||
| 221 | - this.monitorAllEvents = monitor; | ||
| 222 | - } | ||
| 223 | - | ||
| 224 | - @Override | ||
| 225 | public void addListener(OpenFlowSwitchListener listener) { | 221 | public void addListener(OpenFlowSwitchListener listener) { |
| 226 | if (!ofSwitchListener.contains(listener)) { | 222 | if (!ofSwitchListener.contains(listener)) { |
| 227 | this.ofSwitchListener.add(listener); | 223 | this.ofSwitchListener.add(listener); |
| ... | @@ -234,6 +230,16 @@ public class OpenFlowControllerImpl implements OpenFlowController { | ... | @@ -234,6 +230,16 @@ public class OpenFlowControllerImpl implements OpenFlowController { |
| 234 | } | 230 | } |
| 235 | 231 | ||
| 236 | @Override | 232 | @Override |
| 233 | + public void addMessageListener(OpenFlowMessageListener listener) { | ||
| 234 | + ofMessageListener.add(listener); | ||
| 235 | + } | ||
| 236 | + | ||
| 237 | + @Override | ||
| 238 | + public void removeMessageListener(OpenFlowMessageListener listener) { | ||
| 239 | + ofMessageListener.remove(listener); | ||
| 240 | + } | ||
| 241 | + | ||
| 242 | + @Override | ||
| 237 | public void addPacketListener(int priority, PacketListener listener) { | 243 | public void addPacketListener(int priority, PacketListener listener) { |
| 238 | ofPacketListener.put(priority, listener); | 244 | ofPacketListener.put(priority, listener); |
| 239 | } | 245 | } |
| ... | @@ -625,8 +631,20 @@ public class OpenFlowControllerImpl implements OpenFlowController { | ... | @@ -625,8 +631,20 @@ public class OpenFlowControllerImpl implements OpenFlowController { |
| 625 | } | 631 | } |
| 626 | 632 | ||
| 627 | @Override | 633 | @Override |
| 634 | + public void processDownstreamMessage(Dpid dpid, List<OFMessage> m) { | ||
| 635 | + for (OpenFlowMessageListener listener : ofMessageListener) { | ||
| 636 | + listener.handleOutgoingMessage(dpid, m); | ||
| 637 | + } | ||
| 638 | + } | ||
| 639 | + | ||
| 640 | + | ||
| 641 | + @Override | ||
| 628 | public void processMessage(Dpid dpid, OFMessage m) { | 642 | public void processMessage(Dpid dpid, OFMessage m) { |
| 629 | processPacket(dpid, m); | 643 | processPacket(dpid, m); |
| 644 | + | ||
| 645 | + for (OpenFlowMessageListener listener : ofMessageListener) { | ||
| 646 | + listener.handleIncomingMessage(dpid, m); | ||
| 647 | + } | ||
| 630 | } | 648 | } |
| 631 | 649 | ||
| 632 | @Override | 650 | @Override | ... | ... |
protocols/openflow/ctl/src/test/java/org/onosproject/openflow/MockOfPacketIn.java
deleted
100644 → 0
| 1 | -/* | ||
| 2 | - * Copyright 2015-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 | -package org.onosproject.openflow; | ||
| 17 | - | ||
| 18 | -import org.projectfloodlight.openflow.protocol.OFPacketIn; | ||
| 19 | -import org.projectfloodlight.openflow.protocol.OFPacketInReason; | ||
| 20 | -import org.projectfloodlight.openflow.protocol.OFType; | ||
| 21 | -import org.projectfloodlight.openflow.protocol.match.Match; | ||
| 22 | -import org.projectfloodlight.openflow.types.OFBufferId; | ||
| 23 | -import org.projectfloodlight.openflow.types.OFPort; | ||
| 24 | -import org.projectfloodlight.openflow.types.TableId; | ||
| 25 | -import org.projectfloodlight.openflow.types.U64; | ||
| 26 | - | ||
| 27 | -/** | ||
| 28 | - * Mock of the Open Flow packet in message. | ||
| 29 | - */ | ||
| 30 | -public class MockOfPacketIn extends OfMessageAdapter implements OFPacketIn { | ||
| 31 | - public MockOfPacketIn() { | ||
| 32 | - super(OFType.PACKET_IN); | ||
| 33 | - } | ||
| 34 | - | ||
| 35 | - @Override | ||
| 36 | - public OFBufferId getBufferId() { | ||
| 37 | - return null; | ||
| 38 | - } | ||
| 39 | - | ||
| 40 | - @Override | ||
| 41 | - public int getTotalLen() { | ||
| 42 | - return 0; | ||
| 43 | - } | ||
| 44 | - | ||
| 45 | - @Override | ||
| 46 | - public OFPacketInReason getReason() { | ||
| 47 | - return null; | ||
| 48 | - } | ||
| 49 | - | ||
| 50 | - @Override | ||
| 51 | - public TableId getTableId() { | ||
| 52 | - return null; | ||
| 53 | - } | ||
| 54 | - | ||
| 55 | - @Override | ||
| 56 | - public Match getMatch() { | ||
| 57 | - return null; | ||
| 58 | - } | ||
| 59 | - | ||
| 60 | - @Override | ||
| 61 | - public byte[] getData() { | ||
| 62 | - return new byte[0]; | ||
| 63 | - } | ||
| 64 | - | ||
| 65 | - @Override | ||
| 66 | - public OFPort getInPort() { | ||
| 67 | - return null; | ||
| 68 | - } | ||
| 69 | - | ||
| 70 | - @Override | ||
| 71 | - public OFPort getInPhyPort() { | ||
| 72 | - return null; | ||
| 73 | - } | ||
| 74 | - | ||
| 75 | - @Override | ||
| 76 | - public U64 getCookie() { | ||
| 77 | - return null; | ||
| 78 | - } | ||
| 79 | - | ||
| 80 | - @Override | ||
| 81 | - public OFPacketIn.Builder createBuilder() { | ||
| 82 | - return null; | ||
| 83 | - } | ||
| 84 | -} |
| ... | @@ -15,14 +15,11 @@ | ... | @@ -15,14 +15,11 @@ |
| 15 | */ | 15 | */ |
| 16 | package org.onosproject.openflow; | 16 | package org.onosproject.openflow; |
| 17 | 17 | ||
| 18 | -import java.util.List; | ||
| 19 | - | ||
| 20 | import org.jboss.netty.channel.Channel; | 18 | import org.jboss.netty.channel.Channel; |
| 21 | import org.onosproject.net.Device; | 19 | import org.onosproject.net.Device; |
| 22 | import org.onosproject.net.driver.DriverData; | 20 | import org.onosproject.net.driver.DriverData; |
| 23 | import org.onosproject.net.driver.DriverHandler; | 21 | import org.onosproject.net.driver.DriverHandler; |
| 24 | import org.onosproject.openflow.controller.Dpid; | 22 | import org.onosproject.openflow.controller.Dpid; |
| 25 | -import org.onosproject.openflow.controller.OpenFlowEventListener; | ||
| 26 | import org.onosproject.openflow.controller.RoleState; | 23 | import org.onosproject.openflow.controller.RoleState; |
| 27 | import org.onosproject.openflow.controller.driver.OpenFlowAgent; | 24 | import org.onosproject.openflow.controller.driver.OpenFlowAgent; |
| 28 | import org.onosproject.openflow.controller.driver.OpenFlowSwitchDriver; | 25 | import org.onosproject.openflow.controller.driver.OpenFlowSwitchDriver; |
| ... | @@ -38,6 +35,8 @@ import org.projectfloodlight.openflow.protocol.OFPortDesc; | ... | @@ -38,6 +35,8 @@ import org.projectfloodlight.openflow.protocol.OFPortDesc; |
| 38 | import org.projectfloodlight.openflow.protocol.OFPortDescStatsReply; | 35 | import org.projectfloodlight.openflow.protocol.OFPortDescStatsReply; |
| 39 | import org.projectfloodlight.openflow.protocol.OFVersion; | 36 | import org.projectfloodlight.openflow.protocol.OFVersion; |
| 40 | 37 | ||
| 38 | +import java.util.List; | ||
| 39 | + | ||
| 41 | /** | 40 | /** |
| 42 | * Testing adapter for the OpenFlow switch driver class. | 41 | * Testing adapter for the OpenFlow switch driver class. |
| 43 | */ | 42 | */ |
| ... | @@ -300,12 +299,4 @@ public class OpenflowSwitchDriverAdapter implements OpenFlowSwitchDriver { | ... | @@ -300,12 +299,4 @@ public class OpenflowSwitchDriverAdapter implements OpenFlowSwitchDriver { |
| 300 | public String channelId() { | 299 | public String channelId() { |
| 301 | return null; | 300 | return null; |
| 302 | } | 301 | } |
| 303 | - | ||
| 304 | - @Override | ||
| 305 | - public void addEventListener(OpenFlowEventListener listener) { | ||
| 306 | - } | ||
| 307 | - | ||
| 308 | - @Override | ||
| 309 | - public void removeEventListener(OpenFlowEventListener listener) { | ||
| 310 | - } | ||
| 311 | } | 302 | } | ... | ... |
| 1 | -/* | ||
| 2 | - * Copyright 2015-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 | -package org.onosproject.openflow.controller.impl; | ||
| 17 | - | ||
| 18 | -import org.onosproject.openflow.OfMessageAdapter; | ||
| 19 | -import org.projectfloodlight.openflow.protocol.OFFlowRemoved; | ||
| 20 | -import org.projectfloodlight.openflow.protocol.OFType; | ||
| 21 | -import org.projectfloodlight.openflow.protocol.match.Match; | ||
| 22 | -import org.projectfloodlight.openflow.types.TableId; | ||
| 23 | -import org.projectfloodlight.openflow.types.U64; | ||
| 24 | - | ||
| 25 | -/** | ||
| 26 | - * Mock of the Open Flow packet removed message. | ||
| 27 | - */ | ||
| 28 | -public class MockOfFlowRemoved extends OfMessageAdapter implements OFFlowRemoved { | ||
| 29 | - | ||
| 30 | - public MockOfFlowRemoved() { | ||
| 31 | - super(OFType.FLOW_REMOVED); | ||
| 32 | - } | ||
| 33 | - | ||
| 34 | - @Override | ||
| 35 | - public U64 getCookie() { | ||
| 36 | - return null; | ||
| 37 | - } | ||
| 38 | - | ||
| 39 | - @Override | ||
| 40 | - public int getPriority() { | ||
| 41 | - return 0; | ||
| 42 | - } | ||
| 43 | - | ||
| 44 | - @Override | ||
| 45 | - public short getReason() { | ||
| 46 | - return 0; | ||
| 47 | - } | ||
| 48 | - | ||
| 49 | - @Override | ||
| 50 | - public TableId getTableId() throws UnsupportedOperationException { | ||
| 51 | - return null; | ||
| 52 | - } | ||
| 53 | - | ||
| 54 | - @Override | ||
| 55 | - public long getDurationSec() { | ||
| 56 | - return 0; | ||
| 57 | - } | ||
| 58 | - | ||
| 59 | - @Override | ||
| 60 | - public long getDurationNsec() { | ||
| 61 | - return 0; | ||
| 62 | - } | ||
| 63 | - | ||
| 64 | - @Override | ||
| 65 | - public int getIdleTimeout() { | ||
| 66 | - return 0; | ||
| 67 | - } | ||
| 68 | - | ||
| 69 | - @Override | ||
| 70 | - public int getHardTimeout() throws UnsupportedOperationException { | ||
| 71 | - return 0; | ||
| 72 | - } | ||
| 73 | - | ||
| 74 | - @Override | ||
| 75 | - public U64 getPacketCount() { | ||
| 76 | - return null; | ||
| 77 | - } | ||
| 78 | - | ||
| 79 | - @Override | ||
| 80 | - public U64 getByteCount() { | ||
| 81 | - return null; | ||
| 82 | - } | ||
| 83 | - | ||
| 84 | - @Override | ||
| 85 | - public Match getMatch() { | ||
| 86 | - return null; | ||
| 87 | - } | ||
| 88 | - | ||
| 89 | - @Override | ||
| 90 | - public OFFlowRemoved.Builder createBuilder() { | ||
| 91 | - return null; | ||
| 92 | - } | ||
| 93 | -} |
| ... | @@ -104,7 +104,6 @@ public class OpenFlowControllerImplPacketsTest { | ... | @@ -104,7 +104,6 @@ public class OpenFlowControllerImplPacketsTest { |
| 104 | agent = controller.agent; | 104 | agent = controller.agent; |
| 105 | switchListener = new OpenFlowSwitchListenerAdapter(); | 105 | switchListener = new OpenFlowSwitchListenerAdapter(); |
| 106 | controller.addListener(switchListener); | 106 | controller.addListener(switchListener); |
| 107 | - controller.monitorAllEvents(true); | ||
| 108 | 107 | ||
| 109 | packetListener = new TestPacketListener(); | 108 | packetListener = new TestPacketListener(); |
| 110 | controller.addPacketListener(100, packetListener); | 109 | controller.addPacketListener(100, packetListener); | ... | ... |
| ... | @@ -38,6 +38,7 @@ import org.onosproject.net.provider.ProviderId; | ... | @@ -38,6 +38,7 @@ import org.onosproject.net.provider.ProviderId; |
| 38 | import org.onosproject.openflow.controller.Dpid; | 38 | import org.onosproject.openflow.controller.Dpid; |
| 39 | import org.onosproject.openflow.controller.OpenFlowController; | 39 | import org.onosproject.openflow.controller.OpenFlowController; |
| 40 | import org.onosproject.openflow.controller.OpenFlowEventListener; | 40 | import org.onosproject.openflow.controller.OpenFlowEventListener; |
| 41 | +import org.onosproject.openflow.controller.OpenFlowMessageListener; | ||
| 41 | import org.onosproject.openflow.controller.OpenFlowSwitch; | 42 | import org.onosproject.openflow.controller.OpenFlowSwitch; |
| 42 | import org.onosproject.openflow.controller.OpenFlowSwitchListener; | 43 | import org.onosproject.openflow.controller.OpenFlowSwitchListener; |
| 43 | import org.onosproject.openflow.controller.PacketListener; | 44 | import org.onosproject.openflow.controller.PacketListener; |
| ... | @@ -275,10 +276,6 @@ public class OpenFlowDeviceProviderTest { | ... | @@ -275,10 +276,6 @@ public class OpenFlowDeviceProviderTest { |
| 275 | } | 276 | } |
| 276 | 277 | ||
| 277 | @Override | 278 | @Override |
| 278 | - public void monitorAllEvents(boolean monitor) { | ||
| 279 | - } | ||
| 280 | - | ||
| 281 | - @Override | ||
| 282 | public void addListener(OpenFlowSwitchListener listener) { | 279 | public void addListener(OpenFlowSwitchListener listener) { |
| 283 | this.listener = listener; | 280 | this.listener = listener; |
| 284 | } | 281 | } |
| ... | @@ -289,6 +286,16 @@ public class OpenFlowDeviceProviderTest { | ... | @@ -289,6 +286,16 @@ public class OpenFlowDeviceProviderTest { |
| 289 | } | 286 | } |
| 290 | 287 | ||
| 291 | @Override | 288 | @Override |
| 289 | + public void addMessageListener(OpenFlowMessageListener listener) { | ||
| 290 | + | ||
| 291 | + } | ||
| 292 | + | ||
| 293 | + @Override | ||
| 294 | + public void removeMessageListener(OpenFlowMessageListener listener) { | ||
| 295 | + | ||
| 296 | + } | ||
| 297 | + | ||
| 298 | + @Override | ||
| 292 | public void addPacketListener(int priority, PacketListener listener) { | 299 | public void addPacketListener(int priority, PacketListener listener) { |
| 293 | } | 300 | } |
| 294 | 301 | ||
| ... | @@ -416,14 +423,6 @@ public class OpenFlowDeviceProviderTest { | ... | @@ -416,14 +423,6 @@ public class OpenFlowDeviceProviderTest { |
| 416 | return "1.2.3.4:1"; | 423 | return "1.2.3.4:1"; |
| 417 | } | 424 | } |
| 418 | 425 | ||
| 419 | - @Override | ||
| 420 | - public void addEventListener(OpenFlowEventListener listener) { | ||
| 421 | - } | ||
| 422 | - | ||
| 423 | - @Override | ||
| 424 | - public void removeEventListener(OpenFlowEventListener listener) { | ||
| 425 | - } | ||
| 426 | - | ||
| 427 | } | 426 | } |
| 428 | 427 | ||
| 429 | } | 428 | } | ... | ... |
| ... | @@ -41,6 +41,7 @@ import org.onosproject.net.provider.ProviderId; | ... | @@ -41,6 +41,7 @@ import org.onosproject.net.provider.ProviderId; |
| 41 | import org.onosproject.openflow.controller.Dpid; | 41 | import org.onosproject.openflow.controller.Dpid; |
| 42 | import org.onosproject.openflow.controller.OpenFlowController; | 42 | import org.onosproject.openflow.controller.OpenFlowController; |
| 43 | import org.onosproject.openflow.controller.OpenFlowEventListener; | 43 | import org.onosproject.openflow.controller.OpenFlowEventListener; |
| 44 | +import org.onosproject.openflow.controller.OpenFlowMessageListener; | ||
| 44 | import org.onosproject.openflow.controller.OpenFlowSwitch; | 45 | import org.onosproject.openflow.controller.OpenFlowSwitch; |
| 45 | import org.onosproject.openflow.controller.OpenFlowSwitchListener; | 46 | import org.onosproject.openflow.controller.OpenFlowSwitchListener; |
| 46 | import org.onosproject.openflow.controller.PacketListener; | 47 | import org.onosproject.openflow.controller.PacketListener; |
| ... | @@ -225,6 +226,16 @@ public class OpenFlowGroupProviderTest { | ... | @@ -225,6 +226,16 @@ public class OpenFlowGroupProviderTest { |
| 225 | } | 226 | } |
| 226 | 227 | ||
| 227 | @Override | 228 | @Override |
| 229 | + public void addMessageListener(OpenFlowMessageListener listener) { | ||
| 230 | + | ||
| 231 | + } | ||
| 232 | + | ||
| 233 | + @Override | ||
| 234 | + public void removeMessageListener(OpenFlowMessageListener listener) { | ||
| 235 | + | ||
| 236 | + } | ||
| 237 | + | ||
| 238 | + @Override | ||
| 228 | public void addPacketListener(int priority, PacketListener listener) { | 239 | public void addPacketListener(int priority, PacketListener listener) { |
| 229 | 240 | ||
| 230 | } | 241 | } |
| ... | @@ -288,11 +299,6 @@ public class OpenFlowGroupProviderTest { | ... | @@ -288,11 +299,6 @@ public class OpenFlowGroupProviderTest { |
| 288 | public OpenFlowSwitch getEqualSwitch(Dpid dpid) { | 299 | public OpenFlowSwitch getEqualSwitch(Dpid dpid) { |
| 289 | return null; | 300 | return null; |
| 290 | } | 301 | } |
| 291 | - | ||
| 292 | - @Override | ||
| 293 | - public void monitorAllEvents(boolean monitor) { | ||
| 294 | - } | ||
| 295 | - | ||
| 296 | } | 302 | } |
| 297 | 303 | ||
| 298 | private class TestGroupProviderRegistry implements GroupProviderRegistry { | 304 | private class TestGroupProviderRegistry implements GroupProviderRegistry { |
| ... | @@ -411,14 +417,5 @@ public class OpenFlowGroupProviderTest { | ... | @@ -411,14 +417,5 @@ public class OpenFlowGroupProviderTest { |
| 411 | public String channelId() { | 417 | public String channelId() { |
| 412 | return null; | 418 | return null; |
| 413 | } | 419 | } |
| 414 | - | ||
| 415 | - @Override | ||
| 416 | - public void addEventListener(OpenFlowEventListener listener) { | ||
| 417 | - } | ||
| 418 | - | ||
| 419 | - @Override | ||
| 420 | - public void removeEventListener(OpenFlowEventListener listener) { | ||
| 421 | - } | ||
| 422 | - | ||
| 423 | } | 420 | } |
| 424 | } | 421 | } |
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
| ... | @@ -32,7 +32,7 @@ import org.onosproject.net.provider.AbstractProvider; | ... | @@ -32,7 +32,7 @@ import org.onosproject.net.provider.AbstractProvider; |
| 32 | import org.onosproject.net.provider.ProviderId; | 32 | import org.onosproject.net.provider.ProviderId; |
| 33 | import org.onosproject.openflow.controller.Dpid; | 33 | import org.onosproject.openflow.controller.Dpid; |
| 34 | import org.onosproject.openflow.controller.OpenFlowController; | 34 | import org.onosproject.openflow.controller.OpenFlowController; |
| 35 | -import org.onosproject.openflow.controller.OpenFlowEventListener; | 35 | +import org.onosproject.openflow.controller.OpenFlowMessageListener; |
| 36 | import org.onosproject.openflow.controller.OpenFlowSwitch; | 36 | import org.onosproject.openflow.controller.OpenFlowSwitch; |
| 37 | import org.onosproject.openflow.controller.OpenFlowSwitchListener; | 37 | import org.onosproject.openflow.controller.OpenFlowSwitchListener; |
| 38 | import org.onosproject.openflow.controller.RoleState; | 38 | import org.onosproject.openflow.controller.RoleState; |
| ... | @@ -42,6 +42,7 @@ import org.projectfloodlight.openflow.protocol.OFType; | ... | @@ -42,6 +42,7 @@ import org.projectfloodlight.openflow.protocol.OFType; |
| 42 | import org.slf4j.Logger; | 42 | import org.slf4j.Logger; |
| 43 | 43 | ||
| 44 | import java.util.HashMap; | 44 | import java.util.HashMap; |
| 45 | +import java.util.List; | ||
| 45 | import java.util.concurrent.ScheduledFuture; | 46 | import java.util.concurrent.ScheduledFuture; |
| 46 | import java.util.concurrent.TimeUnit; | 47 | import java.util.concurrent.TimeUnit; |
| 47 | 48 | ||
| ... | @@ -71,11 +72,8 @@ public class OpenFlowControlMessageProvider extends AbstractProvider | ... | @@ -71,11 +72,8 @@ public class OpenFlowControlMessageProvider extends AbstractProvider |
| 71 | 72 | ||
| 72 | private final InternalDeviceProvider listener = new InternalDeviceProvider(); | 73 | private final InternalDeviceProvider listener = new InternalDeviceProvider(); |
| 73 | 74 | ||
| 74 | - private final InternalIncomingMessageProvider inMsgListener = | 75 | + private final InternalControlMessageListener messageListener = |
| 75 | - new InternalIncomingMessageProvider(); | 76 | + new InternalControlMessageListener(); |
| 76 | - | ||
| 77 | - private final InternalOutgoingMessageProvider outMsgListener = | ||
| 78 | - new InternalOutgoingMessageProvider(); | ||
| 79 | 77 | ||
| 80 | private HashMap<Dpid, OpenFlowControlMessageAggregator> aggregators = Maps.newHashMap(); | 78 | private HashMap<Dpid, OpenFlowControlMessageAggregator> aggregators = Maps.newHashMap(); |
| 81 | private SharedScheduledExecutorService executor; | 79 | private SharedScheduledExecutorService executor; |
| ... | @@ -98,12 +96,8 @@ public class OpenFlowControlMessageProvider extends AbstractProvider | ... | @@ -98,12 +96,8 @@ public class OpenFlowControlMessageProvider extends AbstractProvider |
| 98 | // listens all OpenFlow device related events | 96 | // listens all OpenFlow device related events |
| 99 | controller.addListener(listener); | 97 | controller.addListener(listener); |
| 100 | 98 | ||
| 101 | - // listens all OpenFlow incoming message events | 99 | + // listens all OpenFlow control message |
| 102 | - controller.addEventListener(inMsgListener); | 100 | + controller.addMessageListener(messageListener); |
| 103 | - controller.monitorAllEvents(true); | ||
| 104 | - | ||
| 105 | - // listens all OpenFlow outgoing message events | ||
| 106 | - controller.getSwitches().forEach(sw -> sw.addEventListener(outMsgListener)); | ||
| 107 | 101 | ||
| 108 | executor = SharedScheduledExecutors.getSingleThreadExecutor(); | 102 | executor = SharedScheduledExecutors.getSingleThreadExecutor(); |
| 109 | 103 | ||
| ... | @@ -117,12 +111,8 @@ public class OpenFlowControlMessageProvider extends AbstractProvider | ... | @@ -117,12 +111,8 @@ public class OpenFlowControlMessageProvider extends AbstractProvider |
| 117 | providerRegistry.unregister(this); | 111 | providerRegistry.unregister(this); |
| 118 | providerService = null; | 112 | providerService = null; |
| 119 | 113 | ||
| 120 | - // stops listening all OpenFlow incoming message events | 114 | + // stops listening all OpenFlow control message events |
| 121 | - controller.monitorAllEvents(false); | 115 | + controller.removeMessageListener(messageListener); |
| 122 | - controller.removeEventListener(inMsgListener); | ||
| 123 | - | ||
| 124 | - // stops listening all OpenFlow outgoing message events | ||
| 125 | - controller.getSwitches().forEach(sw -> sw.removeEventListener(outMsgListener)); | ||
| 126 | 116 | ||
| 127 | log.info("Stopped"); | 117 | log.info("Stopped"); |
| 128 | } | 118 | } |
| ... | @@ -149,12 +139,6 @@ public class OpenFlowControlMessageProvider extends AbstractProvider | ... | @@ -149,12 +139,6 @@ public class OpenFlowControlMessageProvider extends AbstractProvider |
| 149 | return; | 139 | return; |
| 150 | } | 140 | } |
| 151 | 141 | ||
| 152 | - OpenFlowSwitch sw = controller.getSwitch(dpid); | ||
| 153 | - if (sw != null) { | ||
| 154 | - // start to monitor the outgoing control messages | ||
| 155 | - sw.addEventListener(outMsgListener); | ||
| 156 | - } | ||
| 157 | - | ||
| 158 | DeviceId deviceId = deviceId(uri(dpid)); | 142 | DeviceId deviceId = deviceId(uri(dpid)); |
| 159 | OpenFlowControlMessageAggregator ofcma = | 143 | OpenFlowControlMessageAggregator ofcma = |
| 160 | new OpenFlowControlMessageAggregator(metricsService, | 144 | new OpenFlowControlMessageAggregator(metricsService, |
| ... | @@ -171,12 +155,6 @@ public class OpenFlowControlMessageProvider extends AbstractProvider | ... | @@ -171,12 +155,6 @@ public class OpenFlowControlMessageProvider extends AbstractProvider |
| 171 | return; | 155 | return; |
| 172 | } | 156 | } |
| 173 | 157 | ||
| 174 | - OpenFlowSwitch sw = controller.getSwitch(dpid); | ||
| 175 | - if (sw != null) { | ||
| 176 | - // stop monitoring the outgoing control messages | ||
| 177 | - sw.removeEventListener(outMsgListener); | ||
| 178 | - } | ||
| 179 | - | ||
| 180 | // removes the aggregator when switch is removed | 158 | // removes the aggregator when switch is removed |
| 181 | // this also stops the aggregator from running | 159 | // this also stops the aggregator from running |
| 182 | OpenFlowControlMessageAggregator aggregator = aggregators.remove(dpid); | 160 | OpenFlowControlMessageAggregator aggregator = aggregators.remove(dpid); |
| ... | @@ -200,12 +178,12 @@ public class OpenFlowControlMessageProvider extends AbstractProvider | ... | @@ -200,12 +178,12 @@ public class OpenFlowControlMessageProvider extends AbstractProvider |
| 200 | } | 178 | } |
| 201 | 179 | ||
| 202 | /** | 180 | /** |
| 203 | - * A listener for incoming OpenFlow messages. | 181 | + * A listener for all OpenFlow control messages. |
| 204 | */ | 182 | */ |
| 205 | - private class InternalIncomingMessageProvider implements OpenFlowEventListener { | 183 | + private class InternalControlMessageListener implements OpenFlowMessageListener { |
| 206 | 184 | ||
| 207 | @Override | 185 | @Override |
| 208 | - public void handleMessage(Dpid dpid, OFMessage msg) { | 186 | + public void handleIncomingMessage(Dpid dpid, OFMessage msg) { |
| 209 | if (msg.getType() == OFType.PACKET_IN || | 187 | if (msg.getType() == OFType.PACKET_IN || |
| 210 | msg.getType() == OFType.FLOW_MOD || | 188 | msg.getType() == OFType.FLOW_MOD || |
| 211 | msg.getType() == OFType.STATS_REPLY) { | 189 | msg.getType() == OFType.STATS_REPLY) { |
| ... | @@ -215,19 +193,19 @@ public class OpenFlowControlMessageProvider extends AbstractProvider | ... | @@ -215,19 +193,19 @@ public class OpenFlowControlMessageProvider extends AbstractProvider |
| 215 | }); | 193 | }); |
| 216 | } | 194 | } |
| 217 | } | 195 | } |
| 218 | - } | ||
| 219 | - | ||
| 220 | - /** | ||
| 221 | - * A listener for outgoing OpenFlow messages. | ||
| 222 | - */ | ||
| 223 | - private class InternalOutgoingMessageProvider implements OpenFlowEventListener { | ||
| 224 | 196 | ||
| 225 | @Override | 197 | @Override |
| 226 | - public void handleMessage(Dpid dpid, OFMessage msg) { | 198 | + public void handleOutgoingMessage(Dpid dpid, List<OFMessage> msgs) { |
| 227 | - aggregators.computeIfPresent(dpid, (k, v) -> { | 199 | + for (OFMessage msg : msgs) { |
| 228 | - v.increment(msg); | 200 | + if (msg.getType() == OFType.PACKET_OUT || |
| 229 | - return v; | 201 | + msg.getType() == OFType.FLOW_MOD || |
| 230 | - }); | 202 | + msg.getType() == OFType.STATS_REQUEST) { |
| 203 | + aggregators.computeIfPresent(dpid, (k, v) -> { | ||
| 204 | + v.increment(msg); | ||
| 205 | + return v; | ||
| 206 | + }); | ||
| 207 | + } | ||
| 208 | + } | ||
| 231 | } | 209 | } |
| 232 | } | 210 | } |
| 233 | } | 211 | } | ... | ... |
| ... | @@ -40,6 +40,7 @@ import org.onosproject.openflow.controller.DefaultOpenFlowPacketContext; | ... | @@ -40,6 +40,7 @@ import org.onosproject.openflow.controller.DefaultOpenFlowPacketContext; |
| 40 | import org.onosproject.openflow.controller.Dpid; | 40 | import org.onosproject.openflow.controller.Dpid; |
| 41 | import org.onosproject.openflow.controller.OpenFlowController; | 41 | import org.onosproject.openflow.controller.OpenFlowController; |
| 42 | import org.onosproject.openflow.controller.OpenFlowEventListener; | 42 | import org.onosproject.openflow.controller.OpenFlowEventListener; |
| 43 | +import org.onosproject.openflow.controller.OpenFlowMessageListener; | ||
| 43 | import org.onosproject.openflow.controller.OpenFlowPacketContext; | 44 | import org.onosproject.openflow.controller.OpenFlowPacketContext; |
| 44 | import org.onosproject.openflow.controller.OpenFlowSwitch; | 45 | import org.onosproject.openflow.controller.OpenFlowSwitch; |
| 45 | import org.onosproject.openflow.controller.OpenFlowSwitchListener; | 46 | import org.onosproject.openflow.controller.OpenFlowSwitchListener; |
| ... | @@ -287,15 +288,21 @@ public class OpenFlowPacketProviderTest { | ... | @@ -287,15 +288,21 @@ public class OpenFlowPacketProviderTest { |
| 287 | } | 288 | } |
| 288 | 289 | ||
| 289 | @Override | 290 | @Override |
| 290 | - public void monitorAllEvents(boolean monitor) { | 291 | + public void addListener(OpenFlowSwitchListener listener) { |
| 291 | } | 292 | } |
| 292 | 293 | ||
| 293 | @Override | 294 | @Override |
| 294 | - public void addListener(OpenFlowSwitchListener listener) { | 295 | + public void removeListener(OpenFlowSwitchListener listener) { |
| 295 | } | 296 | } |
| 296 | 297 | ||
| 297 | @Override | 298 | @Override |
| 298 | - public void removeListener(OpenFlowSwitchListener listener) { | 299 | + public void addMessageListener(OpenFlowMessageListener listener) { |
| 300 | + | ||
| 301 | + } | ||
| 302 | + | ||
| 303 | + @Override | ||
| 304 | + public void removeMessageListener(OpenFlowMessageListener listener) { | ||
| 305 | + | ||
| 299 | } | 306 | } |
| 300 | 307 | ||
| 301 | @Override | 308 | @Override |
| ... | @@ -428,16 +435,6 @@ public class OpenFlowPacketProviderTest { | ... | @@ -428,16 +435,6 @@ public class OpenFlowPacketProviderTest { |
| 428 | public String channelId() { | 435 | public String channelId() { |
| 429 | return "1.2.3.4:1"; | 436 | return "1.2.3.4:1"; |
| 430 | } | 437 | } |
| 431 | - | ||
| 432 | - @Override | ||
| 433 | - public void addEventListener(OpenFlowEventListener listener) { | ||
| 434 | - } | ||
| 435 | - | ||
| 436 | - @Override | ||
| 437 | - public void removeEventListener(OpenFlowEventListener listener) { | ||
| 438 | - } | ||
| 439 | - | ||
| 440 | - | ||
| 441 | } | 438 | } |
| 442 | 439 | ||
| 443 | } | 440 | } | ... | ... |
-
Please register or login to post a comment