Committed by
Gerrit Code Review
[GEANT] Rate limit on port via NetConf and refactoring.
Change-Id: Id5b5a196bed3b28159160b94bc5ae838d00cb765
Showing
5 changed files
with
381 additions
and
134 deletions
| ... | @@ -35,17 +35,20 @@ import java.util.List; | ... | @@ -35,17 +35,20 @@ import java.util.List; |
| 35 | description = "Configures a device interface") | 35 | description = "Configures a device interface") |
| 36 | public class DeviceInterfaceAddCommand extends AbstractShellCommand { | 36 | public class DeviceInterfaceAddCommand extends AbstractShellCommand { |
| 37 | 37 | ||
| 38 | + private static final String ONE_ACTION_ALLOWED = | ||
| 39 | + "One configuration action allowed at a time"; | ||
| 38 | private static final String CONFIG_VLAN_SUCCESS = | 40 | private static final String CONFIG_VLAN_SUCCESS = |
| 39 | "VLAN %s added on device %s interface %s."; | 41 | "VLAN %s added on device %s interface %s."; |
| 40 | private static final String CONFIG_VLAN_FAILURE = | 42 | private static final String CONFIG_VLAN_FAILURE = |
| 41 | "Failed to add VLAN %s on device %s interface %s."; | 43 | "Failed to add VLAN %s on device %s interface %s."; |
| 42 | - private static final String ONE_VLAN_ALLOWED = | ||
| 43 | - "Only one VLAN allowed for access mode on device %s interface %s."; | ||
| 44 | - | ||
| 45 | private static final String CONFIG_TRUNK_SUCCESS = | 44 | private static final String CONFIG_TRUNK_SUCCESS = |
| 46 | "Trunk mode added for VLAN %s on device %s interface %s."; | 45 | "Trunk mode added for VLAN %s on device %s interface %s."; |
| 47 | private static final String CONFIG_TRUNK_FAILURE = | 46 | private static final String CONFIG_TRUNK_FAILURE = |
| 48 | "Failed to add trunk mode for VLAN %s on device %s interface %s."; | 47 | "Failed to add trunk mode for VLAN %s on device %s interface %s."; |
| 48 | + private static final String CONFIG_RATE_SUCCESS = | ||
| 49 | + "Rate limit %d%% added on device %s interface %s."; | ||
| 50 | + private static final String CONFIG_RATE_FAILURE = | ||
| 51 | + "Failed to add rate limit %d%% on device %s interface %s."; | ||
| 49 | 52 | ||
| 50 | @Argument(index = 0, name = "uri", description = "Device ID", | 53 | @Argument(index = 0, name = "uri", description = "Device ID", |
| 51 | required = true, multiValued = false) | 54 | required = true, multiValued = false) |
| ... | @@ -56,15 +59,20 @@ public class DeviceInterfaceAddCommand extends AbstractShellCommand { | ... | @@ -56,15 +59,20 @@ public class DeviceInterfaceAddCommand extends AbstractShellCommand { |
| 56 | required = true, multiValued = false) | 59 | required = true, multiValued = false) |
| 57 | private String portName = null; | 60 | private String portName = null; |
| 58 | 61 | ||
| 59 | - @Argument(index = 2, name = "vlan", | 62 | + @Option(name = "-r", aliases = "--rate-limit", |
| 60 | - description = "VLAN ID", | 63 | + description = "Percentage for egress bandwidth limit", |
| 61 | - required = true, multiValued = true) | 64 | + required = false, multiValued = false) |
| 62 | - private String[] vlanStrings = null; | 65 | + private String limitString = null; |
| 63 | 66 | ||
| 64 | @Option(name = "-t", aliases = "--trunk", | 67 | @Option(name = "-t", aliases = "--trunk", |
| 65 | - description = "Configure interface as trunk for VLAN(s)", | 68 | + description = "VLAN(s) for trunk port (multiple values are allowed)", |
| 69 | + required = false, multiValued = true) | ||
| 70 | + private String[] trunkVlanStrings = null; | ||
| 71 | + | ||
| 72 | + @Option(name = "-a", aliases = "--access", | ||
| 73 | + description = "VLAN for access port", | ||
| 66 | required = false, multiValued = false) | 74 | required = false, multiValued = false) |
| 67 | - private boolean trunkMode = false; | 75 | + private String accessVlanString = null; |
| 68 | 76 | ||
| 69 | @Override | 77 | @Override |
| 70 | protected void execute() { | 78 | protected void execute() { |
| ... | @@ -73,31 +81,51 @@ public class DeviceInterfaceAddCommand extends AbstractShellCommand { | ... | @@ -73,31 +81,51 @@ public class DeviceInterfaceAddCommand extends AbstractShellCommand { |
| 73 | DriverHandler h = service.createHandler(deviceId); | 81 | DriverHandler h = service.createHandler(deviceId); |
| 74 | InterfaceConfig interfaceConfig = h.behaviour(InterfaceConfig.class); | 82 | InterfaceConfig interfaceConfig = h.behaviour(InterfaceConfig.class); |
| 75 | 83 | ||
| 76 | - List<VlanId> vlanIds = new ArrayList<>(); | 84 | + if (accessVlanString != null && trunkVlanStrings == null && |
| 77 | - for (String vlanString : vlanStrings) { | 85 | + limitString == null) { |
| 78 | - vlanIds.add(VlanId.vlanId(Short.parseShort(vlanString))); | 86 | + // Access mode to be enabled for VLAN. |
| 87 | + addAccessModeToIntf(interfaceConfig); | ||
| 88 | + } else if (trunkVlanStrings != null && accessVlanString == null && | ||
| 89 | + limitString == null) { | ||
| 90 | + // Trunk mode to be enabled for VLANs. | ||
| 91 | + addTrunkModeToIntf(interfaceConfig); | ||
| 92 | + } else if (limitString != null && accessVlanString == null && | ||
| 93 | + trunkVlanStrings == null) { | ||
| 94 | + // Rate limit to be set on interface. | ||
| 95 | + addRateLimitToIntf(interfaceConfig); | ||
| 96 | + } else { | ||
| 97 | + // Option has not been correctly set. | ||
| 98 | + print(ONE_ACTION_ALLOWED); | ||
| 79 | } | 99 | } |
| 100 | + } | ||
| 80 | 101 | ||
| 81 | - if (trunkMode) { | 102 | + private void addRateLimitToIntf(InterfaceConfig config) { |
| 82 | - // Trunk mode to be enabled for VLAN. | 103 | + short rate = Short.parseShort(limitString); |
| 83 | - if (interfaceConfig.addTrunkInterface(deviceId, portName, vlanIds)) { | 104 | + if (config.addRateLimit(portName, rate)) { |
| 84 | - print(CONFIG_TRUNK_SUCCESS, vlanIds, deviceId, portName); | 105 | + print(CONFIG_RATE_SUCCESS, rate, uri, portName); |
| 85 | - } else { | 106 | + } else { |
| 86 | - print(CONFIG_TRUNK_FAILURE, vlanIds, deviceId, portName); | 107 | + print(CONFIG_RATE_FAILURE, rate, uri, portName); |
| 87 | - } | ||
| 88 | - return; | ||
| 89 | } | 108 | } |
| 109 | + } | ||
| 90 | 110 | ||
| 91 | - // Access mode to be enabled for VLAN. | 111 | + private void addTrunkModeToIntf(InterfaceConfig config) { |
| 92 | - if (vlanIds.size() != 1) { | 112 | + List<VlanId> vlanIds = new ArrayList<>(); |
| 93 | - print(ONE_VLAN_ALLOWED, deviceId, portName); | 113 | + for (String vlanString : trunkVlanStrings) { |
| 94 | - return; | 114 | + vlanIds.add(VlanId.vlanId(Short.parseShort(vlanString))); |
| 95 | } | 115 | } |
| 96 | - VlanId accessVlanId = vlanIds.get(0); | 116 | + if (config.addTrunkMode(portName, vlanIds)) { |
| 97 | - if (interfaceConfig.addAccessInterface(deviceId, portName, accessVlanId)) { | 117 | + print(CONFIG_TRUNK_SUCCESS, vlanIds, uri, portName); |
| 98 | - print(CONFIG_VLAN_SUCCESS, accessVlanId, deviceId, portName); | 118 | + } else { |
| 119 | + print(CONFIG_TRUNK_FAILURE, vlanIds, uri, portName); | ||
| 120 | + } | ||
| 121 | + } | ||
| 122 | + | ||
| 123 | + private void addAccessModeToIntf(InterfaceConfig config) { | ||
| 124 | + VlanId accessVlanId = VlanId.vlanId(Short.parseShort(accessVlanString)); | ||
| 125 | + if (config.addAccessMode(portName, accessVlanId)) { | ||
| 126 | + print(CONFIG_VLAN_SUCCESS, accessVlanId, uri, portName); | ||
| 99 | } else { | 127 | } else { |
| 100 | - print(CONFIG_VLAN_FAILURE, accessVlanId, deviceId, portName); | 128 | + print(CONFIG_VLAN_FAILURE, accessVlanId, uri, portName); |
| 101 | } | 129 | } |
| 102 | } | 130 | } |
| 103 | 131 | ... | ... |
| ... | @@ -25,36 +25,51 @@ import org.onosproject.net.driver.DriverHandler; | ... | @@ -25,36 +25,51 @@ import org.onosproject.net.driver.DriverHandler; |
| 25 | import org.onosproject.net.driver.DriverService; | 25 | import org.onosproject.net.driver.DriverService; |
| 26 | 26 | ||
| 27 | /** | 27 | /** |
| 28 | - * Removes configured interface from a device. | 28 | + * Removes an interface configurion from a device. |
| 29 | */ | 29 | */ |
| 30 | @Command(scope = "onos", name = "device-remove-interface", | 30 | @Command(scope = "onos", name = "device-remove-interface", |
| 31 | description = "Removes an interface configuration from a device") | 31 | description = "Removes an interface configuration from a device") |
| 32 | public class DeviceInterfaceRemoveCommand extends AbstractShellCommand { | 32 | public class DeviceInterfaceRemoveCommand extends AbstractShellCommand { |
| 33 | 33 | ||
| 34 | + private static final String ONE_ACTION_ALLOWED = | ||
| 35 | + "One configuration removal allowed at a time"; | ||
| 34 | private static final String REMOVE_ACCESS_SUCCESS = | 36 | private static final String REMOVE_ACCESS_SUCCESS = |
| 35 | - "Access mode deleted from device %s interface %s."; | 37 | + "Access mode removed from device %s interface %s."; |
| 36 | private static final String REMOVE_ACCESS_FAILURE = | 38 | private static final String REMOVE_ACCESS_FAILURE = |
| 37 | - "Failed to delete access mode from device %s interface %s."; | 39 | + "Failed to remove access mode from device %s interface %s."; |
| 38 | - | ||
| 39 | private static final String REMOVE_TRUNK_SUCCESS = | 40 | private static final String REMOVE_TRUNK_SUCCESS = |
| 40 | - "Trunk mode deleted from device %s interface %s."; | 41 | + "Trunk mode removed from device %s interface %s."; |
| 41 | private static final String REMOVE_TRUNK_FAILURE = | 42 | private static final String REMOVE_TRUNK_FAILURE = |
| 42 | - "Failed to delete trunk mode from device %s interface %s."; | 43 | + "Failed to remove trunk mode from device %s interface %s."; |
| 44 | + private static final String REMOVE_RATE_SUCCESS = | ||
| 45 | + "Rate limit removed from device %s interface %s."; | ||
| 46 | + private static final String REMOVE_RATE_FAILURE = | ||
| 47 | + "Failed to remove rate limit from device %s interface %s."; | ||
| 43 | 48 | ||
| 44 | @Argument(index = 0, name = "uri", description = "Device ID", | 49 | @Argument(index = 0, name = "uri", description = "Device ID", |
| 45 | required = true, multiValued = false) | 50 | required = true, multiValued = false) |
| 46 | private String uri = null; | 51 | private String uri = null; |
| 47 | 52 | ||
| 48 | @Argument(index = 1, name = "interface", | 53 | @Argument(index = 1, name = "interface", |
| 49 | - description = "Interface name", | 54 | + description = "Interface name", |
| 50 | - required = true, multiValued = false) | 55 | + required = true, multiValued = false) |
| 51 | private String portName = null; | 56 | private String portName = null; |
| 52 | 57 | ||
| 58 | + @Option(name = "-r", aliases = "--rate-limit", | ||
| 59 | + description = "Percentage for egress bandwidth limit", | ||
| 60 | + required = false, multiValued = false) | ||
| 61 | + private boolean rateLimit = false; | ||
| 62 | + | ||
| 53 | @Option(name = "-t", aliases = "--trunk", | 63 | @Option(name = "-t", aliases = "--trunk", |
| 54 | description = "Remove trunk mode for VLAN(s)", | 64 | description = "Remove trunk mode for VLAN(s)", |
| 55 | required = false, multiValued = false) | 65 | required = false, multiValued = false) |
| 56 | private boolean trunkMode = false; | 66 | private boolean trunkMode = false; |
| 57 | 67 | ||
| 68 | + @Option(name = "-a", aliases = "--access", | ||
| 69 | + description = "Remove access mode for VLAN", | ||
| 70 | + required = false, multiValued = false) | ||
| 71 | + private boolean accessMode = false; | ||
| 72 | + | ||
| 58 | @Override | 73 | @Override |
| 59 | protected void execute() { | 74 | protected void execute() { |
| 60 | DriverService service = get(DriverService.class); | 75 | DriverService service = get(DriverService.class); |
| ... | @@ -62,21 +77,42 @@ public class DeviceInterfaceRemoveCommand extends AbstractShellCommand { | ... | @@ -62,21 +77,42 @@ public class DeviceInterfaceRemoveCommand extends AbstractShellCommand { |
| 62 | DriverHandler h = service.createHandler(deviceId); | 77 | DriverHandler h = service.createHandler(deviceId); |
| 63 | InterfaceConfig interfaceConfig = h.behaviour(InterfaceConfig.class); | 78 | InterfaceConfig interfaceConfig = h.behaviour(InterfaceConfig.class); |
| 64 | 79 | ||
| 65 | - if (trunkMode) { | 80 | + if (trunkMode && !accessMode && !rateLimit) { |
| 66 | // Trunk mode for VLAN to be removed. | 81 | // Trunk mode for VLAN to be removed. |
| 67 | - if (interfaceConfig.removeTrunkInterface(deviceId, portName)) { | 82 | + removeTrunkModeFromIntf(interfaceConfig); |
| 68 | - print(REMOVE_TRUNK_SUCCESS, deviceId, portName); | 83 | + } else if (accessMode && !trunkMode && !rateLimit) { |
| 69 | - } else { | 84 | + // Access mode for VLAN to be removed. |
| 70 | - print(REMOVE_TRUNK_FAILURE, deviceId, portName); | 85 | + removeAccessModeFromIntf(interfaceConfig); |
| 71 | - } | 86 | + } else if (rateLimit && !trunkMode && !accessMode) { |
| 72 | - return; | 87 | + // Rate limit to be removed. |
| 88 | + removeRateLimitFromIntf(interfaceConfig); | ||
| 89 | + } else { | ||
| 90 | + // Option has not been correctly set. | ||
| 91 | + print(ONE_ACTION_ALLOWED); | ||
| 92 | + } | ||
| 93 | + } | ||
| 94 | + | ||
| 95 | + private void removeAccessModeFromIntf(InterfaceConfig interfaceConfig) { | ||
| 96 | + if (interfaceConfig.removeAccessMode(portName)) { | ||
| 97 | + print(REMOVE_ACCESS_SUCCESS, uri, portName); | ||
| 98 | + } else { | ||
| 99 | + print(REMOVE_ACCESS_FAILURE, uri, portName); | ||
| 100 | + } | ||
| 101 | + } | ||
| 102 | + | ||
| 103 | + private void removeTrunkModeFromIntf(InterfaceConfig interfaceConfig) { | ||
| 104 | + if (interfaceConfig.removeTrunkMode(portName)) { | ||
| 105 | + print(REMOVE_TRUNK_SUCCESS, uri, portName); | ||
| 106 | + } else { | ||
| 107 | + print(REMOVE_TRUNK_FAILURE, uri, portName); | ||
| 73 | } | 108 | } |
| 109 | + } | ||
| 74 | 110 | ||
| 75 | - // Access mode for VLAN to be removed. | 111 | + private void removeRateLimitFromIntf(InterfaceConfig config) { |
| 76 | - if (interfaceConfig.removeAccessInterface(deviceId, portName)) { | 112 | + if (config.removeRateLimit(portName)) { |
| 77 | - print(REMOVE_ACCESS_SUCCESS, deviceId, portName); | 113 | + print(REMOVE_RATE_SUCCESS, uri, portName); |
| 78 | } else { | 114 | } else { |
| 79 | - print(REMOVE_ACCESS_FAILURE, deviceId, portName); | 115 | + print(REMOVE_RATE_FAILURE, uri, portName); |
| 80 | } | 116 | } |
| 81 | } | 117 | } |
| 82 | 118 | ... | ... |
| ... | @@ -78,7 +78,7 @@ public class DeviceInterfacesListCommand extends DevicesListCommand { | ... | @@ -78,7 +78,7 @@ public class DeviceInterfacesListCommand extends DevicesListCommand { |
| 78 | InterfaceConfig interfaceConfig = h.behaviour(InterfaceConfig.class); | 78 | InterfaceConfig interfaceConfig = h.behaviour(InterfaceConfig.class); |
| 79 | 79 | ||
| 80 | List<DeviceInterfaceDescription> interfaces = | 80 | List<DeviceInterfaceDescription> interfaces = |
| 81 | - interfaceConfig.getInterfaces(device.id()); | 81 | + interfaceConfig.getInterfaces(); |
| 82 | if (interfaces == null) { | 82 | if (interfaces == null) { |
| 83 | print(ERROR_RESULT); | 83 | print(ERROR_RESULT); |
| 84 | } else if (interfaces.isEmpty()) { | 84 | } else if (interfaces.isEmpty()) { | ... | ... |
| ... | @@ -34,8 +34,19 @@ public interface InterfaceConfig extends HandlerBehaviour { | ... | @@ -34,8 +34,19 @@ public interface InterfaceConfig extends HandlerBehaviour { |
| 34 | * @param intf the name of the interface | 34 | * @param intf the name of the interface |
| 35 | * @param vlanId the VLAN ID | 35 | * @param vlanId the VLAN ID |
| 36 | * @return the result of operation | 36 | * @return the result of operation |
| 37 | + * @deprecated in 1.7.0 Hummingbird release - use of addAccessMode() instead | ||
| 37 | */ | 38 | */ |
| 38 | - boolean addAccessInterface(DeviceId deviceId, String intf, VlanId vlanId); | 39 | + @Deprecated |
| 40 | + public boolean addAccessInterface(DeviceId deviceId, String intf, VlanId vlanId); | ||
| 41 | + | ||
| 42 | + /** | ||
| 43 | + * Adds an access interface to a VLAN. | ||
| 44 | + * | ||
| 45 | + * @param intf the name of the interface | ||
| 46 | + * @param vlanId the VLAN ID | ||
| 47 | + * @return the result of operation | ||
| 48 | + */ | ||
| 49 | + boolean addAccessMode(String intf, VlanId vlanId); | ||
| 39 | 50 | ||
| 40 | /** | 51 | /** |
| 41 | * Removes an access interface to a VLAN. | 52 | * Removes an access interface to a VLAN. |
| ... | @@ -43,40 +54,99 @@ public interface InterfaceConfig extends HandlerBehaviour { | ... | @@ -43,40 +54,99 @@ public interface InterfaceConfig extends HandlerBehaviour { |
| 43 | * @param deviceId the device ID | 54 | * @param deviceId the device ID |
| 44 | * @param intf the name of the interface | 55 | * @param intf the name of the interface |
| 45 | * @return the result of operation | 56 | * @return the result of operation |
| 57 | + * @deprecated in 1.7.0 Hummingbird release - use of removeAccessMode() instead | ||
| 46 | */ | 58 | */ |
| 59 | + @Deprecated | ||
| 47 | boolean removeAccessInterface(DeviceId deviceId, String intf); | 60 | boolean removeAccessInterface(DeviceId deviceId, String intf); |
| 48 | 61 | ||
| 49 | /** | 62 | /** |
| 63 | + * Removes an access interface to a VLAN. | ||
| 64 | + * | ||
| 65 | + * @param intf the name of the interface | ||
| 66 | + * @return the result of operation | ||
| 67 | + */ | ||
| 68 | + boolean removeAccessMode(String intf); | ||
| 69 | + | ||
| 70 | + /** | ||
| 50 | * Adds a trunk interface for VLANs. | 71 | * Adds a trunk interface for VLANs. |
| 51 | * | 72 | * |
| 52 | * @param deviceId the device ID | 73 | * @param deviceId the device ID |
| 53 | * @param intf the name of the interface | 74 | * @param intf the name of the interface |
| 54 | * @param vlanIds the VLAN IDs | 75 | * @param vlanIds the VLAN IDs |
| 55 | * @return the result of operation | 76 | * @return the result of operation |
| 77 | + * @deprecated in 1.7.0 Hummingbird release - use of addTrunkMode() instead | ||
| 56 | */ | 78 | */ |
| 79 | + @Deprecated | ||
| 57 | boolean addTrunkInterface(DeviceId deviceId, String intf, List<VlanId> vlanIds); | 80 | boolean addTrunkInterface(DeviceId deviceId, String intf, List<VlanId> vlanIds); |
| 58 | 81 | ||
| 59 | /** | 82 | /** |
| 60 | - * Removes trunk mode configuration from an interface. | 83 | + * Adds a trunk interface for VLANs. |
| 84 | + * | ||
| 85 | + * @param intf the name of the interface | ||
| 86 | + * @param vlanIds the VLAN IDs | ||
| 87 | + * @return the result of operation | ||
| 88 | + */ | ||
| 89 | + boolean addTrunkMode(String intf, List<VlanId> vlanIds); | ||
| 90 | + | ||
| 91 | + /** | ||
| 92 | + * Removes trunk mode configuration from an interface. | ||
| 61 | * | 93 | * |
| 62 | * @param deviceId the device ID | 94 | * @param deviceId the device ID |
| 63 | * @param intf the name of the interface | 95 | * @param intf the name of the interface |
| 64 | * @return the result of operation | 96 | * @return the result of operation |
| 97 | + * @deprecated in 1.7.0 Hummingbird release - use of removeTrunkMode() instead | ||
| 65 | */ | 98 | */ |
| 99 | + @Deprecated | ||
| 66 | boolean removeTrunkInterface(DeviceId deviceId, String intf); | 100 | boolean removeTrunkInterface(DeviceId deviceId, String intf); |
| 67 | 101 | ||
| 68 | /** | 102 | /** |
| 103 | + * Removes trunk mode configuration from an interface. | ||
| 104 | + * | ||
| 105 | + * @param intf the name of the interface | ||
| 106 | + * @return the result of operation | ||
| 107 | + */ | ||
| 108 | + boolean removeTrunkMode(String intf); | ||
| 109 | + | ||
| 110 | + /** | ||
| 111 | + * Adds a rate limit on an interface. | ||
| 112 | + * | ||
| 113 | + * @param intf the name of the interface | ||
| 114 | + * @param limit the limit as a percentage | ||
| 115 | + * @return the result of operation | ||
| 116 | + */ | ||
| 117 | + boolean addRateLimit(String intf, short limit); | ||
| 118 | + | ||
| 119 | + /** | ||
| 120 | + * Removes rate limit from an interface. | ||
| 121 | + * | ||
| 122 | + * @param intf the name of the interface | ||
| 123 | + * @return the result of operation | ||
| 124 | + */ | ||
| 125 | + boolean removeRateLimit(String intf); | ||
| 126 | + | ||
| 127 | + /** | ||
| 69 | * Provides the interfaces configured on a device. | 128 | * Provides the interfaces configured on a device. |
| 70 | * | 129 | * |
| 71 | * @param deviceId the device ID | 130 | * @param deviceId the device ID |
| 72 | * @return the list of the configured interfaces | 131 | * @return the list of the configured interfaces |
| 132 | + * @deprecated in 1.7.0 Hummingbird release - use of getInterfaces() without | ||
| 133 | + * deviceId as parameter instead | ||
| 134 | + */ | ||
| 135 | + @Deprecated | ||
| 136 | + public List<DeviceInterfaceDescription> getInterfaces(DeviceId deviceId); | ||
| 137 | + | ||
| 138 | + /** | ||
| 139 | + * Provides the interfaces configured on a device. | ||
| 140 | + * | ||
| 141 | + * @return the list of the configured interfaces | ||
| 73 | */ | 142 | */ |
| 74 | - List<DeviceInterfaceDescription> getInterfaces(DeviceId deviceId); | 143 | + List<DeviceInterfaceDescription> getInterfaces(); |
| 75 | 144 | ||
| 76 | /** | 145 | /** |
| 77 | * TODO Addition of more methods to make the behavior symmetrical. | 146 | * TODO Addition of more methods to make the behavior symmetrical. |
| 78 | - * Methods getInterfacesForVlan, getVlansForInterface, getTrunkforInterface, | 147 | + * Methods getInterfacesForVlan(VlanId), hasAccessMode(), hasTrunkMode(), |
| 79 | - * getInterfacesForTrunk should be added to complete the behavior. | 148 | + * getTrunkVlans(Interface), getAccessVlan(Interface) should be added to |
| 149 | + * complete the behavior. | ||
| 80 | */ | 150 | */ |
| 81 | 151 | ||
| 82 | } | 152 | } | ... | ... |
| ... | @@ -54,6 +54,18 @@ public class InterfaceConfigCiscoIosImpl extends AbstractHandlerBehaviour | ... | @@ -54,6 +54,18 @@ public class InterfaceConfigCiscoIosImpl extends AbstractHandlerBehaviour |
| 54 | */ | 54 | */ |
| 55 | @Override | 55 | @Override |
| 56 | public boolean addAccessInterface(DeviceId deviceId, String intf, VlanId vlanId) { | 56 | public boolean addAccessInterface(DeviceId deviceId, String intf, VlanId vlanId) { |
| 57 | + return addAccessMode(intf, vlanId); | ||
| 58 | + } | ||
| 59 | + | ||
| 60 | + /** | ||
| 61 | + * Adds an access interface to a VLAN. | ||
| 62 | + * | ||
| 63 | + * @param intf the name of the interface | ||
| 64 | + * @param vlanId the VLAN ID | ||
| 65 | + * @return the result of operation | ||
| 66 | + */ | ||
| 67 | + @Override | ||
| 68 | + public boolean addAccessMode(String intf, VlanId vlanId) { | ||
| 57 | NetconfController controller = checkNotNull(handler() | 69 | NetconfController controller = checkNotNull(handler() |
| 58 | .get(NetconfController.class)); | 70 | .get(NetconfController.class)); |
| 59 | 71 | ||
| ... | @@ -61,10 +73,10 @@ public class InterfaceConfigCiscoIosImpl extends AbstractHandlerBehaviour | ... | @@ -61,10 +73,10 @@ public class InterfaceConfigCiscoIosImpl extends AbstractHandlerBehaviour |
| 61 | .data().deviceId()).getSession(); | 73 | .data().deviceId()).getSession(); |
| 62 | String reply; | 74 | String reply; |
| 63 | try { | 75 | try { |
| 64 | - reply = session.requestSync(addAccessInterfaceBuilder(intf, vlanId)); | 76 | + reply = session.requestSync(addAccessModeBuilder(intf, vlanId)); |
| 65 | } catch (NetconfException e) { | 77 | } catch (NetconfException e) { |
| 66 | log.error("Failed to configure VLAN ID {} on device {} interface {}.", | 78 | log.error("Failed to configure VLAN ID {} on device {} interface {}.", |
| 67 | - vlanId, deviceId, intf, e); | 79 | + vlanId, handler().data().deviceId(), intf, e); |
| 68 | return false; | 80 | return false; |
| 69 | } | 81 | } |
| 70 | 82 | ||
| ... | @@ -79,31 +91,13 @@ public class InterfaceConfigCiscoIosImpl extends AbstractHandlerBehaviour | ... | @@ -79,31 +91,13 @@ public class InterfaceConfigCiscoIosImpl extends AbstractHandlerBehaviour |
| 79 | * @param vlanId the VLAN ID | 91 | * @param vlanId the VLAN ID |
| 80 | * @return the request string. | 92 | * @return the request string. |
| 81 | */ | 93 | */ |
| 82 | - private String addAccessInterfaceBuilder(String intf, VlanId vlanId) { | 94 | + private String addAccessModeBuilder(String intf, VlanId vlanId) { |
| 83 | - StringBuilder rpc = | 95 | + StringBuilder rpc = new StringBuilder(getOpeningString(intf)); |
| 84 | - new StringBuilder("<rpc xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\" "); | ||
| 85 | - rpc.append("xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">"); | ||
| 86 | - rpc.append("<edit-config>"); | ||
| 87 | - rpc.append("<target>"); | ||
| 88 | - rpc.append("<running/>"); | ||
| 89 | - rpc.append("</target>"); | ||
| 90 | - rpc.append("<config>"); | ||
| 91 | - rpc.append("<xml-config-data>"); | ||
| 92 | - rpc.append("<Device-Configuration><interface><Param>"); | ||
| 93 | - rpc.append(intf); | ||
| 94 | - rpc.append("</Param>"); | ||
| 95 | - rpc.append("<ConfigIf-Configuration>"); | ||
| 96 | rpc.append("<switchport><access><vlan><VLANIDVLANPortAccessMode>"); | 96 | rpc.append("<switchport><access><vlan><VLANIDVLANPortAccessMode>"); |
| 97 | rpc.append(vlanId); | 97 | rpc.append(vlanId); |
| 98 | rpc.append("</VLANIDVLANPortAccessMode></vlan></access></switchport>"); | 98 | rpc.append("</VLANIDVLANPortAccessMode></vlan></access></switchport>"); |
| 99 | rpc.append("<switchport><mode><access/></mode></switchport>"); | 99 | rpc.append("<switchport><mode><access/></mode></switchport>"); |
| 100 | - rpc.append("</ConfigIf-Configuration>"); | 100 | + rpc.append(getClosingString()); |
| 101 | - rpc.append("</interface>"); | ||
| 102 | - rpc.append("</Device-Configuration>"); | ||
| 103 | - rpc.append("</xml-config-data>"); | ||
| 104 | - rpc.append("</config>"); | ||
| 105 | - rpc.append("</edit-config>"); | ||
| 106 | - rpc.append("</rpc>"); | ||
| 107 | 101 | ||
| 108 | return rpc.toString(); | 102 | return rpc.toString(); |
| 109 | } | 103 | } |
| ... | @@ -117,6 +111,17 @@ public class InterfaceConfigCiscoIosImpl extends AbstractHandlerBehaviour | ... | @@ -117,6 +111,17 @@ public class InterfaceConfigCiscoIosImpl extends AbstractHandlerBehaviour |
| 117 | */ | 111 | */ |
| 118 | @Override | 112 | @Override |
| 119 | public boolean removeAccessInterface(DeviceId deviceId, String intf) { | 113 | public boolean removeAccessInterface(DeviceId deviceId, String intf) { |
| 114 | + return removeAccessMode(intf); | ||
| 115 | + } | ||
| 116 | + | ||
| 117 | + /** | ||
| 118 | + * Removes an access interface to a VLAN. | ||
| 119 | + * | ||
| 120 | + * @param intf the name of the interface | ||
| 121 | + * @return the result of operation | ||
| 122 | + */ | ||
| 123 | + @Override | ||
| 124 | + public boolean removeAccessMode(String intf) { | ||
| 120 | NetconfController controller = checkNotNull(handler() | 125 | NetconfController controller = checkNotNull(handler() |
| 121 | .get(NetconfController.class)); | 126 | .get(NetconfController.class)); |
| 122 | 127 | ||
| ... | @@ -124,10 +129,10 @@ public class InterfaceConfigCiscoIosImpl extends AbstractHandlerBehaviour | ... | @@ -124,10 +129,10 @@ public class InterfaceConfigCiscoIosImpl extends AbstractHandlerBehaviour |
| 124 | .data().deviceId()).getSession(); | 129 | .data().deviceId()).getSession(); |
| 125 | String reply; | 130 | String reply; |
| 126 | try { | 131 | try { |
| 127 | - reply = session.requestSync(removeAccessInterfaceBuilder(intf)); | 132 | + reply = session.requestSync(removeAccessModeBuilder(intf)); |
| 128 | } catch (NetconfException e) { | 133 | } catch (NetconfException e) { |
| 129 | log.error("Failed to remove access mode from device {} interface {}.", | 134 | log.error("Failed to remove access mode from device {} interface {}.", |
| 130 | - deviceId, intf, e); | 135 | + handler().data().deviceId(), intf, e); |
| 131 | return false; | 136 | return false; |
| 132 | } | 137 | } |
| 133 | 138 | ||
| ... | @@ -141,30 +146,12 @@ public class InterfaceConfigCiscoIosImpl extends AbstractHandlerBehaviour | ... | @@ -141,30 +146,12 @@ public class InterfaceConfigCiscoIosImpl extends AbstractHandlerBehaviour |
| 141 | * @param intf the name of the interface | 146 | * @param intf the name of the interface |
| 142 | * @return the request string. | 147 | * @return the request string. |
| 143 | */ | 148 | */ |
| 144 | - private String removeAccessInterfaceBuilder(String intf) { | 149 | + private String removeAccessModeBuilder(String intf) { |
| 145 | - StringBuilder rpc = | 150 | + StringBuilder rpc = new StringBuilder(getOpeningString(intf)); |
| 146 | - new StringBuilder("<rpc xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\" "); | ||
| 147 | - rpc.append("xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">"); | ||
| 148 | - rpc.append("<edit-config>"); | ||
| 149 | - rpc.append("<target>"); | ||
| 150 | - rpc.append("<running/>"); | ||
| 151 | - rpc.append("</target>"); | ||
| 152 | - rpc.append("<config>"); | ||
| 153 | - rpc.append("<xml-config-data>"); | ||
| 154 | - rpc.append("<Device-Configuration><interface><Param>"); | ||
| 155 | - rpc.append(intf); | ||
| 156 | - rpc.append("</Param>"); | ||
| 157 | - rpc.append("<ConfigIf-Configuration>"); | ||
| 158 | rpc.append("<switchport operation=\"delete\"><access><vlan><VLANIDVLANPortAccessMode>"); | 151 | rpc.append("<switchport operation=\"delete\"><access><vlan><VLANIDVLANPortAccessMode>"); |
| 159 | rpc.append("</VLANIDVLANPortAccessMode></vlan></access></switchport>"); | 152 | rpc.append("</VLANIDVLANPortAccessMode></vlan></access></switchport>"); |
| 160 | rpc.append("<switchport operation=\"delete\"><mode><access/></mode></switchport>"); | 153 | rpc.append("<switchport operation=\"delete\"><mode><access/></mode></switchport>"); |
| 161 | - rpc.append("</ConfigIf-Configuration>"); | 154 | + rpc.append(getClosingString()); |
| 162 | - rpc.append("</interface>"); | ||
| 163 | - rpc.append("</Device-Configuration>"); | ||
| 164 | - rpc.append("</xml-config-data>"); | ||
| 165 | - rpc.append("</config>"); | ||
| 166 | - rpc.append("</edit-config>"); | ||
| 167 | - rpc.append("</rpc>"); | ||
| 168 | 155 | ||
| 169 | return rpc.toString(); | 156 | return rpc.toString(); |
| 170 | } | 157 | } |
| ... | @@ -179,6 +166,18 @@ public class InterfaceConfigCiscoIosImpl extends AbstractHandlerBehaviour | ... | @@ -179,6 +166,18 @@ public class InterfaceConfigCiscoIosImpl extends AbstractHandlerBehaviour |
| 179 | */ | 166 | */ |
| 180 | @Override | 167 | @Override |
| 181 | public boolean addTrunkInterface(DeviceId deviceId, String intf, List<VlanId> vlanIds) { | 168 | public boolean addTrunkInterface(DeviceId deviceId, String intf, List<VlanId> vlanIds) { |
| 169 | + return addTrunkMode(intf, vlanIds); | ||
| 170 | + } | ||
| 171 | + | ||
| 172 | + /** | ||
| 173 | + * Adds a trunk interface for VLANs. | ||
| 174 | + * | ||
| 175 | + * @param intf the name of the interface | ||
| 176 | + * @param vlanIds the VLAN IDs | ||
| 177 | + * @return the result of operation | ||
| 178 | + */ | ||
| 179 | + @Override | ||
| 180 | + public boolean addTrunkMode(String intf, List<VlanId> vlanIds) { | ||
| 182 | NetconfController controller = checkNotNull(handler() | 181 | NetconfController controller = checkNotNull(handler() |
| 183 | .get(NetconfController.class)); | 182 | .get(NetconfController.class)); |
| 184 | 183 | ||
| ... | @@ -186,10 +185,10 @@ public class InterfaceConfigCiscoIosImpl extends AbstractHandlerBehaviour | ... | @@ -186,10 +185,10 @@ public class InterfaceConfigCiscoIosImpl extends AbstractHandlerBehaviour |
| 186 | .data().deviceId()).getSession(); | 185 | .data().deviceId()).getSession(); |
| 187 | String reply; | 186 | String reply; |
| 188 | try { | 187 | try { |
| 189 | - reply = session.requestSync(addTrunkInterfaceBuilder(intf, vlanIds)); | 188 | + reply = session.requestSync(addTrunkModeBuilder(intf, vlanIds)); |
| 190 | } catch (NetconfException e) { | 189 | } catch (NetconfException e) { |
| 191 | log.error("Failed to configure trunk mode for VLAN ID {} on device {} interface {}.", | 190 | log.error("Failed to configure trunk mode for VLAN ID {} on device {} interface {}.", |
| 192 | - vlanIds, deviceId, intf, e); | 191 | + vlanIds, handler().data().deviceId(), intf, e); |
| 193 | return false; | 192 | return false; |
| 194 | } | 193 | } |
| 195 | 194 | ||
| ... | @@ -204,33 +203,15 @@ public class InterfaceConfigCiscoIosImpl extends AbstractHandlerBehaviour | ... | @@ -204,33 +203,15 @@ public class InterfaceConfigCiscoIosImpl extends AbstractHandlerBehaviour |
| 204 | * @param vlanIds the VLAN IDs | 203 | * @param vlanIds the VLAN IDs |
| 205 | * @return the request string. | 204 | * @return the request string. |
| 206 | */ | 205 | */ |
| 207 | - private String addTrunkInterfaceBuilder(String intf, List<VlanId> vlanIds) { | 206 | + private String addTrunkModeBuilder(String intf, List<VlanId> vlanIds) { |
| 208 | - StringBuilder rpc = | 207 | + StringBuilder rpc = new StringBuilder(getOpeningString(intf)); |
| 209 | - new StringBuilder("<rpc xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\" "); | ||
| 210 | - rpc.append("xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">"); | ||
| 211 | - rpc.append("<edit-config>"); | ||
| 212 | - rpc.append("<target>"); | ||
| 213 | - rpc.append("<running/>"); | ||
| 214 | - rpc.append("</target>"); | ||
| 215 | - rpc.append("<config>"); | ||
| 216 | - rpc.append("<xml-config-data>"); | ||
| 217 | - rpc.append("<Device-Configuration><interface><Param>"); | ||
| 218 | - rpc.append(intf); | ||
| 219 | - rpc.append("</Param>"); | ||
| 220 | - rpc.append("<ConfigIf-Configuration>"); | ||
| 221 | rpc.append("<switchport><trunk><encapsulation><dot1q/></encapsulation>"); | 208 | rpc.append("<switchport><trunk><encapsulation><dot1q/></encapsulation>"); |
| 222 | rpc.append("</trunk></switchport><switchport><trunk><allowed><vlan>"); | 209 | rpc.append("</trunk></switchport><switchport><trunk><allowed><vlan>"); |
| 223 | rpc.append("<VLANIDsAllowedVLANsPortTrunkingMode>"); | 210 | rpc.append("<VLANIDsAllowedVLANsPortTrunkingMode>"); |
| 224 | rpc.append(getVlansString(vlanIds)); | 211 | rpc.append(getVlansString(vlanIds)); |
| 225 | rpc.append("</VLANIDsAllowedVLANsPortTrunkingMode></vlan></allowed></trunk>"); | 212 | rpc.append("</VLANIDsAllowedVLANsPortTrunkingMode></vlan></allowed></trunk>"); |
| 226 | rpc.append("</switchport><switchport><mode><trunk/></mode></switchport>"); | 213 | rpc.append("</switchport><switchport><mode><trunk/></mode></switchport>"); |
| 227 | - rpc.append("</ConfigIf-Configuration>"); | 214 | + rpc.append(getClosingString()); |
| 228 | - rpc.append("</interface>"); | ||
| 229 | - rpc.append("</Device-Configuration>"); | ||
| 230 | - rpc.append("</xml-config-data>"); | ||
| 231 | - rpc.append("</config>"); | ||
| 232 | - rpc.append("</edit-config>"); | ||
| 233 | - rpc.append("</rpc>"); | ||
| 234 | 215 | ||
| 235 | return rpc.toString(); | 216 | return rpc.toString(); |
| 236 | } | 217 | } |
| ... | @@ -244,6 +225,17 @@ public class InterfaceConfigCiscoIosImpl extends AbstractHandlerBehaviour | ... | @@ -244,6 +225,17 @@ public class InterfaceConfigCiscoIosImpl extends AbstractHandlerBehaviour |
| 244 | */ | 225 | */ |
| 245 | @Override | 226 | @Override |
| 246 | public boolean removeTrunkInterface(DeviceId deviceId, String intf) { | 227 | public boolean removeTrunkInterface(DeviceId deviceId, String intf) { |
| 228 | + return removeTrunkMode(intf); | ||
| 229 | + } | ||
| 230 | + | ||
| 231 | + /** | ||
| 232 | + * Removes trunk mode configuration from an interface. | ||
| 233 | + * | ||
| 234 | + * @param intf the name of the interface | ||
| 235 | + * @return the result of operation | ||
| 236 | + */ | ||
| 237 | + @Override | ||
| 238 | + public boolean removeTrunkMode(String intf) { | ||
| 247 | NetconfController controller = checkNotNull(handler() | 239 | NetconfController controller = checkNotNull(handler() |
| 248 | .get(NetconfController.class)); | 240 | .get(NetconfController.class)); |
| 249 | 241 | ||
| ... | @@ -251,10 +243,10 @@ public class InterfaceConfigCiscoIosImpl extends AbstractHandlerBehaviour | ... | @@ -251,10 +243,10 @@ public class InterfaceConfigCiscoIosImpl extends AbstractHandlerBehaviour |
| 251 | .data().deviceId()).getSession(); | 243 | .data().deviceId()).getSession(); |
| 252 | String reply; | 244 | String reply; |
| 253 | try { | 245 | try { |
| 254 | - reply = session.requestSync(removeTrunkInterfaceBuilder(intf)); | 246 | + reply = session.requestSync(removeTrunkModeBuilder(intf)); |
| 255 | } catch (NetconfException e) { | 247 | } catch (NetconfException e) { |
| 256 | - log.error("Failed to remove trunk mode on device {} interface {}.", | 248 | + log.error("Failed to remove trunk mode from device {} interface {}.", |
| 257 | - deviceId, intf, e); | 249 | + handler().data().deviceId(), intf, e); |
| 258 | return false; | 250 | return false; |
| 259 | } | 251 | } |
| 260 | 252 | ||
| ... | @@ -268,7 +260,114 @@ public class InterfaceConfigCiscoIosImpl extends AbstractHandlerBehaviour | ... | @@ -268,7 +260,114 @@ public class InterfaceConfigCiscoIosImpl extends AbstractHandlerBehaviour |
| 268 | * @param intf the name of the interface | 260 | * @param intf the name of the interface |
| 269 | * @return the request string. | 261 | * @return the request string. |
| 270 | */ | 262 | */ |
| 271 | - private String removeTrunkInterfaceBuilder(String intf) { | 263 | + private String removeTrunkModeBuilder(String intf) { |
| 264 | + StringBuilder rpc = new StringBuilder(getOpeningString(intf)); | ||
| 265 | + rpc.append("<switchport><mode operation=\"delete\"><trunk/></mode></switchport>"); | ||
| 266 | + rpc.append("<switchport><trunk operation=\"delete\"><encapsulation>"); | ||
| 267 | + rpc.append("<dot1q/></encapsulation></trunk></switchport>"); | ||
| 268 | + rpc.append("<switchport><trunk operation=\"delete\"><allowed><vlan>"); | ||
| 269 | + rpc.append("<VLANIDsAllowedVLANsPortTrunkingMode>"); | ||
| 270 | + rpc.append("</VLANIDsAllowedVLANsPortTrunkingMode></vlan></allowed>"); | ||
| 271 | + rpc.append("</trunk></switchport>"); | ||
| 272 | + rpc.append(getClosingString()); | ||
| 273 | + | ||
| 274 | + return rpc.toString(); | ||
| 275 | + } | ||
| 276 | + | ||
| 277 | + /** | ||
| 278 | + * Adds a rate limit on an interface. | ||
| 279 | + * | ||
| 280 | + * @param intf the name of the interface | ||
| 281 | + * @param limit the limit as a percentage | ||
| 282 | + * @return the result of operation | ||
| 283 | + */ | ||
| 284 | + @Override | ||
| 285 | + public boolean addRateLimit(String intf, short limit) { | ||
| 286 | + NetconfController controller = checkNotNull(handler() | ||
| 287 | + .get(NetconfController.class)); | ||
| 288 | + | ||
| 289 | + NetconfSession session = controller.getDevicesMap().get(handler() | ||
| 290 | + .data().deviceId()).getSession(); | ||
| 291 | + String reply; | ||
| 292 | + try { | ||
| 293 | + reply = session.requestSync(addRateLimitBuilder(intf, limit)); | ||
| 294 | + } catch (NetconfException e) { | ||
| 295 | + log.error("Failed to configure rate limit {}%% on device {} interface {}.", | ||
| 296 | + limit, handler().data().deviceId(), intf, e); | ||
| 297 | + return false; | ||
| 298 | + } | ||
| 299 | + | ||
| 300 | + return XmlConfigParser.configSuccess(XmlConfigParser.loadXml( | ||
| 301 | + new ByteArrayInputStream(reply.getBytes(StandardCharsets.UTF_8)))); | ||
| 302 | + } | ||
| 303 | + | ||
| 304 | + /** | ||
| 305 | + * Builds a request to configure an interface with rate limit. | ||
| 306 | + * | ||
| 307 | + * @param intf the name of the interface | ||
| 308 | + * @param limit the limit as a percentage | ||
| 309 | + * @return the request string. | ||
| 310 | + */ | ||
| 311 | + private String addRateLimitBuilder(String intf, short limit) { | ||
| 312 | + StringBuilder rpc = new StringBuilder(getOpeningString(intf)); | ||
| 313 | + rpc.append("<srr-queue><bandwidth><limit>"); | ||
| 314 | + rpc.append("<EnterBandwidthLimitInterfaceAsPercentage>"); | ||
| 315 | + rpc.append(limit); | ||
| 316 | + rpc.append("</EnterBandwidthLimitInterfaceAsPercentage>"); | ||
| 317 | + rpc.append("</limit></bandwidth></srr-queue>"); | ||
| 318 | + rpc.append(getClosingString()); | ||
| 319 | + | ||
| 320 | + return rpc.toString(); | ||
| 321 | + } | ||
| 322 | + | ||
| 323 | + /** | ||
| 324 | + * Removes rate limit from an interface. | ||
| 325 | + * | ||
| 326 | + * @param intf the name of the interface | ||
| 327 | + * @return the result of operation | ||
| 328 | + */ | ||
| 329 | + @Override | ||
| 330 | + public boolean removeRateLimit(String intf) { | ||
| 331 | + NetconfController controller = checkNotNull(handler() | ||
| 332 | + .get(NetconfController.class)); | ||
| 333 | + | ||
| 334 | + NetconfSession session = controller.getDevicesMap().get(handler() | ||
| 335 | + .data().deviceId()).getSession(); | ||
| 336 | + String reply; | ||
| 337 | + try { | ||
| 338 | + reply = session.requestSync(removeRateLimitBuilder(intf)); | ||
| 339 | + } catch (NetconfException e) { | ||
| 340 | + log.error("Failed to remove rate limit from device {} interface {}.", | ||
| 341 | + handler().data().deviceId(), intf, e); | ||
| 342 | + return false; | ||
| 343 | + } | ||
| 344 | + | ||
| 345 | + return XmlConfigParser.configSuccess(XmlConfigParser.loadXml( | ||
| 346 | + new ByteArrayInputStream(reply.getBytes(StandardCharsets.UTF_8)))); | ||
| 347 | + } | ||
| 348 | + | ||
| 349 | + /** | ||
| 350 | + * Builds a request to remove a rate limit from an interface. | ||
| 351 | + * | ||
| 352 | + * @param intf the name of the interface | ||
| 353 | + * @return the request string. | ||
| 354 | + */ | ||
| 355 | + private String removeRateLimitBuilder(String intf) { | ||
| 356 | + StringBuilder rpc = new StringBuilder(getOpeningString(intf)); | ||
| 357 | + rpc.append("<srr-queue operation=\"delete\"><bandwidth><limit>"); | ||
| 358 | + rpc.append("</limit></bandwidth></srr-queue>"); | ||
| 359 | + rpc.append(getClosingString()); | ||
| 360 | + | ||
| 361 | + return rpc.toString(); | ||
| 362 | + } | ||
| 363 | + | ||
| 364 | + /** | ||
| 365 | + * Builds the opening of a request for the configuration of an interface. | ||
| 366 | + * | ||
| 367 | + * @param intf the interface to be configured | ||
| 368 | + * @return the opening string | ||
| 369 | + */ | ||
| 370 | + private String getOpeningString(String intf) { | ||
| 272 | StringBuilder rpc = | 371 | StringBuilder rpc = |
| 273 | new StringBuilder("<rpc xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\" "); | 372 | new StringBuilder("<rpc xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\" "); |
| 274 | rpc.append("xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">"); | 373 | rpc.append("xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">"); |
| ... | @@ -282,13 +381,17 @@ public class InterfaceConfigCiscoIosImpl extends AbstractHandlerBehaviour | ... | @@ -282,13 +381,17 @@ public class InterfaceConfigCiscoIosImpl extends AbstractHandlerBehaviour |
| 282 | rpc.append(intf); | 381 | rpc.append(intf); |
| 283 | rpc.append("</Param>"); | 382 | rpc.append("</Param>"); |
| 284 | rpc.append("<ConfigIf-Configuration>"); | 383 | rpc.append("<ConfigIf-Configuration>"); |
| 285 | - rpc.append("<switchport><mode operation=\"delete\"><trunk/></mode></switchport>"); | 384 | + |
| 286 | - rpc.append("<switchport><trunk operation=\"delete\"><encapsulation>"); | 385 | + return rpc.toString(); |
| 287 | - rpc.append("<dot1q/></encapsulation></trunk></switchport>"); | 386 | + } |
| 288 | - rpc.append("<switchport><trunk operation=\"delete\"><allowed><vlan>"); | 387 | + |
| 289 | - rpc.append("<VLANIDsAllowedVLANsPortTrunkingMode>"); | 388 | + /** |
| 290 | - rpc.append("</VLANIDsAllowedVLANsPortTrunkingMode></vlan></allowed>"); | 389 | + * Builds the closing of a request for the configuration of an interface. |
| 291 | - rpc.append("</trunk></switchport></ConfigIf-Configuration>"); | 390 | + * |
| 391 | + * @return the closing string | ||
| 392 | + */ | ||
| 393 | + private String getClosingString() { | ||
| 394 | + StringBuilder rpc = new StringBuilder("</ConfigIf-Configuration>"); | ||
| 292 | rpc.append("</interface>"); | 395 | rpc.append("</interface>"); |
| 293 | rpc.append("</Device-Configuration>"); | 396 | rpc.append("</Device-Configuration>"); |
| 294 | rpc.append("</xml-config-data>"); | 397 | rpc.append("</xml-config-data>"); |
| ... | @@ -326,6 +429,16 @@ public class InterfaceConfigCiscoIosImpl extends AbstractHandlerBehaviour | ... | @@ -326,6 +429,16 @@ public class InterfaceConfigCiscoIosImpl extends AbstractHandlerBehaviour |
| 326 | */ | 429 | */ |
| 327 | @Override | 430 | @Override |
| 328 | public List<DeviceInterfaceDescription> getInterfaces(DeviceId deviceId) { | 431 | public List<DeviceInterfaceDescription> getInterfaces(DeviceId deviceId) { |
| 432 | + return getInterfaces(); | ||
| 433 | + } | ||
| 434 | + | ||
| 435 | + /** | ||
| 436 | + * Provides the interfaces configured on a device. | ||
| 437 | + * | ||
| 438 | + * @return the list of the configured interfaces | ||
| 439 | + */ | ||
| 440 | + @Override | ||
| 441 | + public List<DeviceInterfaceDescription> getInterfaces() { | ||
| 329 | NetconfController controller = | 442 | NetconfController controller = |
| 330 | checkNotNull(handler().get(NetconfController.class)); | 443 | checkNotNull(handler().get(NetconfController.class)); |
| 331 | 444 | ||
| ... | @@ -336,7 +449,7 @@ public class InterfaceConfigCiscoIosImpl extends AbstractHandlerBehaviour | ... | @@ -336,7 +449,7 @@ public class InterfaceConfigCiscoIosImpl extends AbstractHandlerBehaviour |
| 336 | reply = session.requestSync(getConfigBuilder()); | 449 | reply = session.requestSync(getConfigBuilder()); |
| 337 | } catch (NetconfException e) { | 450 | } catch (NetconfException e) { |
| 338 | log.error("Failed to retrieve configuration from device {}.", | 451 | log.error("Failed to retrieve configuration from device {}.", |
| 339 | - deviceId, e); | 452 | + handler().data().deviceId(), e); |
| 340 | return null; | 453 | return null; |
| 341 | } | 454 | } |
| 342 | 455 | ... | ... |
-
Please register or login to post a comment