Showing
2 changed files
with
38 additions
and
7 deletions
| 1 | package org.onlab.onos.of.controller; | 1 | package org.onlab.onos.of.controller; |
| 2 | 2 | ||
| 3 | +import org.projectfloodlight.openflow.protocol.OFPortStatus; | ||
| 4 | + | ||
| 3 | /** | 5 | /** |
| 4 | * Allows for providers interested in Switch events to be notified. | 6 | * Allows for providers interested in Switch events to be notified. |
| 5 | */ | 7 | */ |
| ... | @@ -17,4 +19,10 @@ public interface OpenFlowSwitchListener { | ... | @@ -17,4 +19,10 @@ public interface OpenFlowSwitchListener { |
| 17 | */ | 19 | */ |
| 18 | public void switchRemoved(Dpid dpid); | 20 | public void switchRemoved(Dpid dpid); |
| 19 | 21 | ||
| 22 | + /** | ||
| 23 | + * Notify that a port has changed. | ||
| 24 | + * @param dpid the switch on which the change happened. | ||
| 25 | + * @param status the new state of the port. | ||
| 26 | + */ | ||
| 27 | + public void portChanged(Dpid dpid, OFPortStatus status); | ||
| 20 | } | 28 | } | ... | ... |
providers/of/device/src/main/java/org/onlab/onos/provider/of/device/impl/OpenFlowDeviceProvider.java
| ... | @@ -33,6 +33,7 @@ import org.onlab.onos.of.controller.RoleState; | ... | @@ -33,6 +33,7 @@ import org.onlab.onos.of.controller.RoleState; |
| 33 | import org.projectfloodlight.openflow.protocol.OFPortConfig; | 33 | import org.projectfloodlight.openflow.protocol.OFPortConfig; |
| 34 | import org.projectfloodlight.openflow.protocol.OFPortDesc; | 34 | import org.projectfloodlight.openflow.protocol.OFPortDesc; |
| 35 | import org.projectfloodlight.openflow.protocol.OFPortState; | 35 | import org.projectfloodlight.openflow.protocol.OFPortState; |
| 36 | +import org.projectfloodlight.openflow.protocol.OFPortStatus; | ||
| 36 | import org.slf4j.Logger; | 37 | import org.slf4j.Logger; |
| 37 | 38 | ||
| 38 | /** | 39 | /** |
| ... | @@ -130,6 +131,18 @@ public class OpenFlowDeviceProvider extends AbstractProvider implements DevicePr | ... | @@ -130,6 +131,18 @@ public class OpenFlowDeviceProvider extends AbstractProvider implements DevicePr |
| 130 | providerService.deviceDisconnected(deviceId(uri)); | 131 | providerService.deviceDisconnected(deviceId(uri)); |
| 131 | } | 132 | } |
| 132 | 133 | ||
| 134 | + @Override | ||
| 135 | + public void portChanged(Dpid dpid, OFPortStatus status) { | ||
| 136 | + final PortDescription portDescription = buildPortDescription(status.getDesc()); | ||
| 137 | + final URI uri = buildURI(dpid); | ||
| 138 | + providerService.portStatusChanged(deviceId(uri), portDescription); | ||
| 139 | + } | ||
| 140 | + | ||
| 141 | + /** | ||
| 142 | + * Given a dpid builds a URI for the device. | ||
| 143 | + * @param dpid the dpid to build the uri from | ||
| 144 | + * @return returns a uri of the form of:<dpidHexForm> | ||
| 145 | + */ | ||
| 133 | private URI buildURI(Dpid dpid) { | 146 | private URI buildURI(Dpid dpid) { |
| 134 | URI uri = null; | 147 | URI uri = null; |
| 135 | try { | 148 | try { |
| ... | @@ -140,21 +153,31 @@ public class OpenFlowDeviceProvider extends AbstractProvider implements DevicePr | ... | @@ -140,21 +153,31 @@ public class OpenFlowDeviceProvider extends AbstractProvider implements DevicePr |
| 140 | return uri; | 153 | return uri; |
| 141 | } | 154 | } |
| 142 | 155 | ||
| 156 | + /** | ||
| 157 | + * Builds a list of port descriptions for a given list of ports. | ||
| 158 | + * @param ports the list of ports | ||
| 159 | + * @return list of portdescriptions | ||
| 160 | + */ | ||
| 143 | private List<PortDescription> buildPortDescriptions( | 161 | private List<PortDescription> buildPortDescriptions( |
| 144 | List<OFPortDesc> ports) { | 162 | List<OFPortDesc> ports) { |
| 145 | final List<PortDescription> portDescs = new ArrayList<PortDescription>(); | 163 | final List<PortDescription> portDescs = new ArrayList<PortDescription>(); |
| 146 | - PortNumber portNo; | ||
| 147 | - boolean enabled; | ||
| 148 | for (OFPortDesc port : ports) { | 164 | for (OFPortDesc port : ports) { |
| 149 | - portNo = PortNumber.portNumber(port.getPortNo().getPortNumber()); | 165 | + portDescs.add(buildPortDescription(port)); |
| 150 | - enabled = !port.getState().contains(OFPortState.LINK_DOWN) && | ||
| 151 | - !port.getConfig().contains(OFPortConfig.PORT_DOWN); | ||
| 152 | - portDescs.add(new DefaultPortDescription(portNo, | ||
| 153 | - enabled)); | ||
| 154 | } | 166 | } |
| 155 | return portDescs; | 167 | return portDescs; |
| 156 | } | 168 | } |
| 157 | 169 | ||
| 170 | + /** | ||
| 171 | + * Build a portDescription from a given port. | ||
| 172 | + * @param port the port to build from. | ||
| 173 | + * @return portDescription for the port. | ||
| 174 | + */ | ||
| 175 | + private PortDescription buildPortDescription(OFPortDesc port) { | ||
| 176 | + final PortNumber portNo = PortNumber.portNumber(port.getPortNo().getPortNumber()); | ||
| 177 | + final boolean enabled = !port.getState().contains(OFPortState.LINK_DOWN) && | ||
| 178 | + !port.getConfig().contains(OFPortConfig.PORT_DOWN); | ||
| 179 | + return new DefaultPortDescription(portNo, enabled); | ||
| 180 | + } | ||
| 158 | } | 181 | } |
| 159 | 182 | ||
| 160 | } | 183 | } | ... | ... |
-
Please register or login to post a comment