Fix optical port types in device store (ONOS-2046).
Fix CLI add-optical-intent cmd for TL1-based devices (ONOS-2045). Change-Id: I4ba79476104d9906707cc7cc683fedd4ce4343bb
Showing
5 changed files
with
63 additions
and
24 deletions
... | @@ -206,7 +206,6 @@ public class OpticalPathProvisioner { | ... | @@ -206,7 +206,6 @@ public class OpticalPathProvisioner { |
206 | src = p2pIntent.ingressPoint(); | 206 | src = p2pIntent.ingressPoint(); |
207 | dst = p2pIntent.egressPoint(); | 207 | dst = p2pIntent.egressPoint(); |
208 | } else { | 208 | } else { |
209 | - log.error("Unsupported intent type: {}", intent.getClass()); | ||
210 | return; | 209 | return; |
211 | } | 210 | } |
212 | 211 | ... | ... |
... | @@ -20,6 +20,7 @@ import org.apache.karaf.shell.commands.Command; | ... | @@ -20,6 +20,7 @@ import org.apache.karaf.shell.commands.Command; |
20 | import org.onosproject.net.ConnectPoint; | 20 | import org.onosproject.net.ConnectPoint; |
21 | import org.onosproject.net.OchPort; | 21 | import org.onosproject.net.OchPort; |
22 | import org.onosproject.net.OduCltPort; | 22 | import org.onosproject.net.OduCltPort; |
23 | +import org.onosproject.net.DeviceId; | ||
23 | import org.onosproject.net.OduSignalType; | 24 | import org.onosproject.net.OduSignalType; |
24 | import org.onosproject.net.Port; | 25 | import org.onosproject.net.Port; |
25 | import org.onosproject.net.device.DeviceService; | 26 | import org.onosproject.net.device.DeviceService; |
... | @@ -28,6 +29,10 @@ import org.onosproject.net.intent.IntentService; | ... | @@ -28,6 +29,10 @@ import org.onosproject.net.intent.IntentService; |
28 | import org.onosproject.net.intent.OpticalCircuitIntent; | 29 | import org.onosproject.net.intent.OpticalCircuitIntent; |
29 | import org.onosproject.net.intent.OpticalConnectivityIntent; | 30 | import org.onosproject.net.intent.OpticalConnectivityIntent; |
30 | 31 | ||
32 | +import java.util.List; | ||
33 | + | ||
34 | +import static com.google.common.base.Preconditions.checkArgument; | ||
35 | + | ||
31 | /** | 36 | /** |
32 | * Installs optical connectivity or circuit intents, depending on given port types. | 37 | * Installs optical connectivity or circuit intents, depending on given port types. |
33 | */ | 38 | */ |
... | @@ -45,13 +50,37 @@ public class AddOpticalIntentCommand extends ConnectivityIntentCommand { | ... | @@ -45,13 +50,37 @@ public class AddOpticalIntentCommand extends ConnectivityIntentCommand { |
45 | required = true, multiValued = false) | 50 | required = true, multiValued = false) |
46 | String egressDeviceString = null; | 51 | String egressDeviceString = null; |
47 | 52 | ||
53 | + private ConnectPoint createConnectPoint(String devicePortString) { | ||
54 | + String[] splitted = devicePortString.split("/"); | ||
55 | + | ||
56 | + checkArgument(splitted.length == 2, | ||
57 | + "Connect point must be in \"deviceUri/portNumber\" format"); | ||
58 | + | ||
59 | + DeviceId deviceId = DeviceId.deviceId(splitted[0]); | ||
60 | + | ||
61 | + DeviceService deviceService = get(DeviceService.class); | ||
62 | + | ||
63 | + List<Port> ports = deviceService.getPorts(deviceId); | ||
64 | + | ||
65 | + for (Port port : ports) { | ||
66 | + if (splitted[1].equals(port.number().name())) { | ||
67 | + return new ConnectPoint(deviceId, port.number()); | ||
68 | + } | ||
69 | + } | ||
70 | + | ||
71 | + return null; | ||
72 | + } | ||
73 | + | ||
48 | @Override | 74 | @Override |
49 | protected void execute() { | 75 | protected void execute() { |
50 | IntentService service = get(IntentService.class); | 76 | IntentService service = get(IntentService.class); |
51 | 77 | ||
52 | - ConnectPoint ingress = ConnectPoint.deviceConnectPoint(ingressDeviceString); | 78 | + ConnectPoint ingress = createConnectPoint(ingressDeviceString); |
79 | + ConnectPoint egress = createConnectPoint(egressDeviceString); | ||
53 | 80 | ||
54 | - ConnectPoint egress = ConnectPoint.deviceConnectPoint(egressDeviceString); | 81 | + if (ingress == null || egress == null) { |
82 | + print("Could not create optical intent"); | ||
83 | + } | ||
55 | 84 | ||
56 | DeviceService deviceService = get(DeviceService.class); | 85 | DeviceService deviceService = get(DeviceService.class); |
57 | Port srcPort = deviceService.getPort(ingress.deviceId(), ingress.port()); | 86 | Port srcPort = deviceService.getPort(ingress.deviceId(), ingress.port()); | ... | ... |
... | @@ -22,10 +22,17 @@ import org.onosproject.net.intent.IntentId; | ... | @@ -22,10 +22,17 @@ import org.onosproject.net.intent.IntentId; |
22 | import java.util.Set; | 22 | import java.util.Set; |
23 | 23 | ||
24 | public interface DeviceResourceStore { | 24 | public interface DeviceResourceStore { |
25 | + /** | ||
26 | + * Returns unallocated ports on the given device. | ||
27 | + * | ||
28 | + * @param deviceId device ID | ||
29 | + * @return set of unallocated ports | ||
30 | + */ | ||
25 | Set<Port> getFreePorts(DeviceId deviceId); | 31 | Set<Port> getFreePorts(DeviceId deviceId); |
26 | 32 | ||
27 | /** | 33 | /** |
28 | * Allocates the given ports to the given intent. | 34 | * Allocates the given ports to the given intent. |
35 | + * | ||
29 | * @param ports set of ports to allocate | 36 | * @param ports set of ports to allocate |
30 | * @param intentId intent ID | 37 | * @param intentId intent ID |
31 | * @return true if allocation was successful, false otherwise | 38 | * @return true if allocation was successful, false otherwise | ... | ... |
... | @@ -265,7 +265,8 @@ public class OpticalConnectivityIntentCompiler implements IntentCompiler<Optical | ... | @@ -265,7 +265,8 @@ public class OpticalConnectivityIntentCompiler implements IntentCompiler<Optical |
265 | if (edge.link().type() != Link.Type.OPTICAL) { | 265 | if (edge.link().type() != Link.Type.OPTICAL) { |
266 | return -1; | 266 | return -1; |
267 | } | 267 | } |
268 | - return edge.link().annotations().value("optical.type").equals("WDM") ? +1 : -1; | 268 | + //return edge.link().annotations().value("optical.type").equals("WDM") ? +1 : -1; |
269 | + return 1; | ||
269 | } | 270 | } |
270 | }; | 271 | }; |
271 | 272 | ... | ... |
... | @@ -37,6 +37,7 @@ import org.onosproject.cluster.NodeId; | ... | @@ -37,6 +37,7 @@ import org.onosproject.cluster.NodeId; |
37 | import org.onosproject.mastership.MastershipService; | 37 | import org.onosproject.mastership.MastershipService; |
38 | import org.onosproject.mastership.MastershipTerm; | 38 | import org.onosproject.mastership.MastershipTerm; |
39 | import org.onosproject.mastership.MastershipTermService; | 39 | import org.onosproject.mastership.MastershipTermService; |
40 | +import org.onosproject.net.Annotations; | ||
40 | import org.onosproject.net.AnnotationsUtil; | 41 | import org.onosproject.net.AnnotationsUtil; |
41 | import org.onosproject.net.DefaultAnnotations; | 42 | import org.onosproject.net.DefaultAnnotations; |
42 | import org.onosproject.net.DefaultDevice; | 43 | import org.onosproject.net.DefaultDevice; |
... | @@ -1007,6 +1008,26 @@ public class GossipDeviceStore | ... | @@ -1007,6 +1008,26 @@ public class GossipDeviceStore |
1007 | chassisId, annotations); | 1008 | chassisId, annotations); |
1008 | } | 1009 | } |
1009 | 1010 | ||
1011 | + private Port buildTypedPort(Device device, PortNumber number, boolean isEnabled, | ||
1012 | + PortDescription description, Annotations annotations) { | ||
1013 | + switch (description.type()) { | ||
1014 | + case OMS: | ||
1015 | + OmsPortDescription omsDesc = (OmsPortDescription) description; | ||
1016 | + return new OmsPort(device, number, isEnabled, omsDesc.minFrequency(), | ||
1017 | + omsDesc.maxFrequency(), omsDesc.grid(), annotations); | ||
1018 | + case OCH: | ||
1019 | + OchPortDescription ochDesc = (OchPortDescription) description; | ||
1020 | + return new OchPort(device, number, isEnabled, ochDesc.signalType(), | ||
1021 | + ochDesc.isTunable(), ochDesc.lambda(), annotations); | ||
1022 | + case ODUCLT: | ||
1023 | + OduCltPortDescription oduDesc = (OduCltPortDescription) description; | ||
1024 | + return new OduCltPort(device, number, isEnabled, oduDesc.signalType(), annotations); | ||
1025 | + default: | ||
1026 | + return new DefaultPort(device, number, isEnabled, description.type(), | ||
1027 | + description.portSpeed(), annotations); | ||
1028 | + } | ||
1029 | + } | ||
1030 | + | ||
1010 | /** | 1031 | /** |
1011 | * Returns a Port, merging description given from multiple Providers. | 1032 | * Returns a Port, merging description given from multiple Providers. |
1012 | * | 1033 | * |
... | @@ -1048,25 +1069,7 @@ public class GossipDeviceStore | ... | @@ -1048,25 +1069,7 @@ public class GossipDeviceStore |
1048 | } | 1069 | } |
1049 | annotations = merge(annotations, otherPortDesc.value().annotations()); | 1070 | annotations = merge(annotations, otherPortDesc.value().annotations()); |
1050 | PortDescription other = otherPortDesc.value(); | 1071 | PortDescription other = otherPortDesc.value(); |
1051 | - switch (other.type()) { | 1072 | + updated = buildTypedPort(device, number, isEnabled, other, annotations); |
1052 | - case OMS: | ||
1053 | - OmsPortDescription omsPortDesc = (OmsPortDescription) otherPortDesc.value(); | ||
1054 | - updated = new OmsPort(device, number, isEnabled, omsPortDesc.minFrequency(), | ||
1055 | - omsPortDesc.maxFrequency(), omsPortDesc.grid(), annotations); | ||
1056 | - break; | ||
1057 | - case OCH: | ||
1058 | - OchPortDescription ochPortDesc = (OchPortDescription) otherPortDesc.value(); | ||
1059 | - updated = new OchPort(device, number, isEnabled, ochPortDesc.signalType(), | ||
1060 | - ochPortDesc.isTunable(), ochPortDesc.lambda(), annotations); | ||
1061 | - break; | ||
1062 | - case ODUCLT: | ||
1063 | - OduCltPortDescription oduCltPortDesc = (OduCltPortDescription) otherPortDesc.value(); | ||
1064 | - updated = new OduCltPort(device, number, isEnabled, oduCltPortDesc.signalType(), annotations); | ||
1065 | - break; | ||
1066 | - default: | ||
1067 | - updated = new DefaultPort( | ||
1068 | - device, number, isEnabled, other.type(), other.portSpeed(), annotations); | ||
1069 | - } | ||
1070 | newest = otherPortDesc.timestamp(); | 1073 | newest = otherPortDesc.timestamp(); |
1071 | } | 1074 | } |
1072 | } | 1075 | } |
... | @@ -1075,7 +1078,7 @@ public class GossipDeviceStore | ... | @@ -1075,7 +1078,7 @@ public class GossipDeviceStore |
1075 | } | 1078 | } |
1076 | PortDescription current = portDesc.value(); | 1079 | PortDescription current = portDesc.value(); |
1077 | return updated == null | 1080 | return updated == null |
1078 | - ? new DefaultPort(device, number, isEnabled, current.type(), current.portSpeed(), annotations) | 1081 | + ? buildTypedPort(device, number, isEnabled, current, annotations) |
1079 | : updated; | 1082 | : updated; |
1080 | } | 1083 | } |
1081 | 1084 | ... | ... |
-
Please register or login to post a comment