alshabib

updating ports

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
......