Showing
1 changed file
with
41 additions
and
23 deletions
providers/of/device/src/main/java/org/onlab/onos/provider/of/device/impl/OpenFlowDeviceProvider.java
1 | package org.onlab.onos.provider.of.device.impl; | 1 | package org.onlab.onos.provider.of.device.impl; |
2 | 2 | ||
3 | +import static org.onlab.onos.net.DeviceId.deviceId; | ||
4 | +import static org.slf4j.LoggerFactory.getLogger; | ||
5 | + | ||
6 | +import java.net.URI; | ||
7 | +import java.net.URISyntaxException; | ||
8 | +import java.util.ArrayList; | ||
9 | +import java.util.List; | ||
10 | + | ||
3 | import org.apache.felix.scr.annotations.Activate; | 11 | import org.apache.felix.scr.annotations.Activate; |
4 | import org.apache.felix.scr.annotations.Component; | 12 | import org.apache.felix.scr.annotations.Component; |
5 | import org.apache.felix.scr.annotations.Deactivate; | 13 | import org.apache.felix.scr.annotations.Deactivate; |
... | @@ -7,11 +15,14 @@ import org.apache.felix.scr.annotations.Reference; | ... | @@ -7,11 +15,14 @@ import org.apache.felix.scr.annotations.Reference; |
7 | import org.apache.felix.scr.annotations.ReferenceCardinality; | 15 | import org.apache.felix.scr.annotations.ReferenceCardinality; |
8 | import org.onlab.onos.net.Device; | 16 | import org.onlab.onos.net.Device; |
9 | import org.onlab.onos.net.MastershipRole; | 17 | import org.onlab.onos.net.MastershipRole; |
18 | +import org.onlab.onos.net.PortNumber; | ||
10 | import org.onlab.onos.net.device.DefaultDeviceDescription; | 19 | import org.onlab.onos.net.device.DefaultDeviceDescription; |
20 | +import org.onlab.onos.net.device.DefaultPortDescription; | ||
11 | import org.onlab.onos.net.device.DeviceDescription; | 21 | import org.onlab.onos.net.device.DeviceDescription; |
12 | import org.onlab.onos.net.device.DeviceProvider; | 22 | import org.onlab.onos.net.device.DeviceProvider; |
13 | import org.onlab.onos.net.device.DeviceProviderRegistry; | 23 | import org.onlab.onos.net.device.DeviceProviderRegistry; |
14 | import org.onlab.onos.net.device.DeviceProviderService; | 24 | import org.onlab.onos.net.device.DeviceProviderService; |
25 | +import org.onlab.onos.net.device.PortDescription; | ||
15 | import org.onlab.onos.net.provider.AbstractProvider; | 26 | import org.onlab.onos.net.provider.AbstractProvider; |
16 | import org.onlab.onos.net.provider.ProviderId; | 27 | import org.onlab.onos.net.provider.ProviderId; |
17 | import org.onlab.onos.of.controller.Dpid; | 28 | import org.onlab.onos.of.controller.Dpid; |
... | @@ -19,14 +30,9 @@ import org.onlab.onos.of.controller.OpenFlowController; | ... | @@ -19,14 +30,9 @@ import org.onlab.onos.of.controller.OpenFlowController; |
19 | import org.onlab.onos.of.controller.OpenFlowSwitch; | 30 | import org.onlab.onos.of.controller.OpenFlowSwitch; |
20 | import org.onlab.onos.of.controller.OpenFlowSwitchListener; | 31 | import org.onlab.onos.of.controller.OpenFlowSwitchListener; |
21 | import org.onlab.onos.of.controller.RoleState; | 32 | import org.onlab.onos.of.controller.RoleState; |
33 | +import org.projectfloodlight.openflow.protocol.OFPortDesc; | ||
22 | import org.slf4j.Logger; | 34 | import org.slf4j.Logger; |
23 | 35 | ||
24 | -import java.net.URI; | ||
25 | -import java.net.URISyntaxException; | ||
26 | - | ||
27 | -import static org.onlab.onos.net.DeviceId.deviceId; | ||
28 | -import static org.slf4j.LoggerFactory.getLogger; | ||
29 | - | ||
30 | /** | 36 | /** |
31 | * Provider which uses an OpenFlow controller to detect network | 37 | * Provider which uses an OpenFlow controller to detect network |
32 | * infrastructure devices. | 38 | * infrastructure devices. |
... | @@ -73,19 +79,19 @@ public class OpenFlowDeviceProvider extends AbstractProvider implements DevicePr | ... | @@ -73,19 +79,19 @@ public class OpenFlowDeviceProvider extends AbstractProvider implements DevicePr |
73 | @Override | 79 | @Override |
74 | public void roleChanged(Device device, MastershipRole newRole) { | 80 | public void roleChanged(Device device, MastershipRole newRole) { |
75 | switch (newRole) { | 81 | switch (newRole) { |
76 | - case MASTER: | 82 | + case MASTER: |
77 | - controller.setRole(new Dpid(device.id().uri().getSchemeSpecificPart()), | 83 | + controller.setRole(new Dpid(device.id().uri().getSchemeSpecificPart()), |
78 | - RoleState.MASTER); | 84 | + RoleState.MASTER); |
79 | - break; | 85 | + break; |
80 | - case STANDBY: | 86 | + case STANDBY: |
81 | - controller.setRole(new Dpid(device.id().uri().getSchemeSpecificPart()), | 87 | + controller.setRole(new Dpid(device.id().uri().getSchemeSpecificPart()), |
82 | - RoleState.EQUAL); | 88 | + RoleState.EQUAL); |
83 | - case NONE: | 89 | + case NONE: |
84 | - controller.setRole(new Dpid(device.id().uri().getSchemeSpecificPart()), | 90 | + controller.setRole(new Dpid(device.id().uri().getSchemeSpecificPart()), |
85 | - RoleState.SLAVE); | 91 | + RoleState.SLAVE); |
86 | - break; | 92 | + break; |
87 | - default: | 93 | + default: |
88 | - log.error("Unknown Mastership state : {}", newRole); | 94 | + log.error("Unknown Mastership state : {}", newRole); |
89 | 95 | ||
90 | } | 96 | } |
91 | log.info("Accepting mastership role change for device {}", device.id()); | 97 | log.info("Accepting mastership role change for device {}", device.id()); |
... | @@ -102,11 +108,23 @@ public class OpenFlowDeviceProvider extends AbstractProvider implements DevicePr | ... | @@ -102,11 +108,23 @@ public class OpenFlowDeviceProvider extends AbstractProvider implements DevicePr |
102 | 108 | ||
103 | DeviceDescription description = | 109 | DeviceDescription description = |
104 | new DefaultDeviceDescription(buildURI(dpid), Device.Type.SWITCH, | 110 | new DefaultDeviceDescription(buildURI(dpid), Device.Type.SWITCH, |
105 | - sw.manfacturerDescription(), | 111 | + sw.manfacturerDescription(), |
106 | - sw.hardwareDescription(), | 112 | + sw.hardwareDescription(), |
107 | - sw.softwareDescription(), | 113 | + sw.softwareDescription(), |
108 | - sw.softwareDescription()); | 114 | + sw.softwareDescription()); |
109 | providerService.deviceConnected(deviceId(uri), description); | 115 | providerService.deviceConnected(deviceId(uri), description); |
116 | + providerService.updatePorts(deviceId(uri), buildPortDescriptions(sw.getPorts())); | ||
117 | + } | ||
118 | + | ||
119 | + private List<PortDescription> buildPortDescriptions( | ||
120 | + List<OFPortDesc> ports) { | ||
121 | + List<PortDescription> portDescs = new ArrayList<PortDescription>(); | ||
122 | + for (OFPortDesc port : ports) { | ||
123 | + PortNumber portNo = PortNumber.portNumber(port.getPortNo().getPortNumber()); | ||
124 | + | ||
125 | + portDescs.add(new DefaultPortDescription(portNo, | ||
126 | + port.getState())); | ||
127 | + } | ||
110 | } | 128 | } |
111 | 129 | ||
112 | @Override | 130 | @Override | ... | ... |
-
Please register or login to post a comment