Committed by
Gerrit Code Review
ONOS-3575 Netconf connection exceptions refactoring and port number in netconf-cfg.json
Change-Id: I46771a1a3ce99b25c2aecd7ba1838f9f1614e789
Showing
9 changed files
with
103 additions
and
126 deletions
... | @@ -27,6 +27,7 @@ import org.onosproject.netconf.NetconfDevice; | ... | @@ -27,6 +27,7 @@ import org.onosproject.netconf.NetconfDevice; |
27 | import org.slf4j.Logger; | 27 | import org.slf4j.Logger; |
28 | 28 | ||
29 | import java.io.ByteArrayInputStream; | 29 | import java.io.ByteArrayInputStream; |
30 | +import java.io.IOException; | ||
30 | import java.nio.charset.StandardCharsets; | 31 | import java.nio.charset.StandardCharsets; |
31 | import java.util.ArrayList; | 32 | import java.util.ArrayList; |
32 | import java.util.List; | 33 | import java.util.List; |
... | @@ -49,10 +50,14 @@ public class NetconfControllerConfig extends AbstractHandlerBehaviour | ... | @@ -49,10 +50,14 @@ public class NetconfControllerConfig extends AbstractHandlerBehaviour |
49 | DeviceId ofDeviceId = handler.data().deviceId(); | 50 | DeviceId ofDeviceId = handler.data().deviceId(); |
50 | Preconditions.checkNotNull(controller, "Netconf controller is null"); | 51 | Preconditions.checkNotNull(controller, "Netconf controller is null"); |
51 | List<ControllerInfo> controllers = new ArrayList<>(); | 52 | List<ControllerInfo> controllers = new ArrayList<>(); |
52 | - controllers.addAll(XmlConfigParser.parseStreamControllers(XmlConfigParser. | 53 | + try { |
53 | - loadXml(new ByteArrayInputStream(controller. | 54 | + controllers.addAll(XmlConfigParser.parseStreamControllers(XmlConfigParser. |
54 | - getDevicesMap().get(ofDeviceId).getSession(). | 55 | + loadXml(new ByteArrayInputStream(controller. |
55 | - getConfig("running").getBytes(StandardCharsets.UTF_8))))); | 56 | + getDevicesMap().get(ofDeviceId).getSession(). |
57 | + getConfig("running").getBytes(StandardCharsets.UTF_8))))); | ||
58 | + } catch (IOException e) { | ||
59 | + log.error("Cannot comunicate to device {} ", ofDeviceId); | ||
60 | + } | ||
56 | return controllers; | 61 | return controllers; |
57 | } | 62 | } |
58 | 63 | ||
... | @@ -65,19 +70,26 @@ public class NetconfControllerConfig extends AbstractHandlerBehaviour | ... | @@ -65,19 +70,26 @@ public class NetconfControllerConfig extends AbstractHandlerBehaviour |
65 | try { | 70 | try { |
66 | NetconfDevice device = controller.getNetconfDevice(deviceId); | 71 | NetconfDevice device = controller.getNetconfDevice(deviceId); |
67 | log.warn("provider map {}", controller.getDevicesMap()); | 72 | log.warn("provider map {}", controller.getDevicesMap()); |
68 | - String config = XmlConfigParser.createControllersConfig( | 73 | + String config = null; |
69 | - XmlConfigParser.loadXml(getClass().getResourceAsStream("controllers.xml")), | 74 | + try { |
70 | - XmlConfigParser.loadXml( | 75 | + config = XmlConfigParser.createControllersConfig( |
71 | - new ByteArrayInputStream(device.getSession() | 76 | + XmlConfigParser.loadXml(getClass().getResourceAsStream("controllers.xml")), |
72 | - .getConfig("running") | 77 | + XmlConfigParser.loadXml( |
73 | - .getBytes( | 78 | + new ByteArrayInputStream(device.getSession() |
74 | - StandardCharsets.UTF_8))), | 79 | + .getConfig("running") |
75 | - "running", "merge", "create", controllers | 80 | + .getBytes( |
76 | - ); | 81 | + StandardCharsets.UTF_8))), |
82 | + "running", "merge", "create", controllers | ||
83 | + ); | ||
84 | + } catch (IOException e) { | ||
85 | + log.error("Cannot comunicate to device {} , exception {}", deviceId, e.getMessage()); | ||
86 | + } | ||
77 | device.getSession().editConfig(config.substring(config.indexOf("-->") + 3)); | 87 | device.getSession().editConfig(config.substring(config.indexOf("-->") + 3)); |
78 | } catch (NullPointerException e) { | 88 | } catch (NullPointerException e) { |
79 | log.warn("No NETCONF device with requested parameters " + e); | 89 | log.warn("No NETCONF device with requested parameters " + e); |
80 | throw new NullPointerException("No NETCONF device with requested parameters " + e); | 90 | throw new NullPointerException("No NETCONF device with requested parameters " + e); |
91 | + } catch (IOException e) { | ||
92 | + log.error("Cannot comunicate to device {} , exception {}", deviceId, e.getMessage()); | ||
81 | } | 93 | } |
82 | 94 | ||
83 | } | 95 | } | ... | ... |
... | @@ -68,7 +68,7 @@ public class NetconfDeviceInfo { | ... | @@ -68,7 +68,7 @@ public class NetconfDeviceInfo { |
68 | * @param password the password for the device | 68 | * @param password the password for the device |
69 | * @param ipAddress the ip address | 69 | * @param ipAddress the ip address |
70 | * @param port the tcp port | 70 | * @param port the tcp port |
71 | - * @param keyString the string cointaing the key. | 71 | + * @param keyString the string containing the key. |
72 | */ | 72 | */ |
73 | public NetconfDeviceInfo(String name, String password, IpAddress ipAddress, | 73 | public NetconfDeviceInfo(String name, String password, IpAddress ipAddress, |
74 | int port, String keyString) { | 74 | int port, String keyString) { | ... | ... |
... | @@ -16,6 +16,7 @@ | ... | @@ -16,6 +16,7 @@ |
16 | 16 | ||
17 | package org.onosproject.netconf; | 17 | package org.onosproject.netconf; |
18 | 18 | ||
19 | +import java.io.IOException; | ||
19 | import java.util.List; | 20 | import java.util.List; |
20 | 21 | ||
21 | /** | 22 | /** |
... | @@ -30,14 +31,14 @@ public interface NetconfSession { | ... | @@ -30,14 +31,14 @@ public interface NetconfSession { |
30 | * @param request the XML containing the request to the server. | 31 | * @param request the XML containing the request to the server. |
31 | * @return device running configuration | 32 | * @return device running configuration |
32 | */ | 33 | */ |
33 | - String get(String request); | 34 | + String get(String request) throws IOException; |
34 | 35 | ||
35 | /** | 36 | /** |
36 | * Executes an RPC to the server. | 37 | * Executes an RPC to the server. |
37 | * @param request the XML containing the RPC for the server. | 38 | * @param request the XML containing the RPC for the server. |
38 | * @return Server response or ERROR | 39 | * @return Server response or ERROR |
39 | */ | 40 | */ |
40 | - String doRPC(String request); | 41 | + String doRPC(String request) throws IOException; |
41 | 42 | ||
42 | /** | 43 | /** |
43 | * Retrives the specified configuration. | 44 | * Retrives the specified configuration. |
... | @@ -45,7 +46,7 @@ public interface NetconfSession { | ... | @@ -45,7 +46,7 @@ public interface NetconfSession { |
45 | * @param targetConfiguration the type of configuration to retrieve. | 46 | * @param targetConfiguration the type of configuration to retrieve. |
46 | * @return specified configuration. | 47 | * @return specified configuration. |
47 | */ | 48 | */ |
48 | - String getConfig(String targetConfiguration); | 49 | + String getConfig(String targetConfiguration) throws IOException; |
49 | 50 | ||
50 | /** | 51 | /** |
51 | * Retrives part of the specivied configuration based on the filterSchema. | 52 | * Retrives part of the specivied configuration based on the filterSchema. |
... | @@ -55,7 +56,8 @@ public interface NetconfSession { | ... | @@ -55,7 +56,8 @@ public interface NetconfSession { |
55 | * elements we are interested in | 56 | * elements we are interested in |
56 | * @return device running configuration. | 57 | * @return device running configuration. |
57 | */ | 58 | */ |
58 | - String getConfig(String targetConfiguration, String configurationFilterSchema); | 59 | + String getConfig(String targetConfiguration, String configurationFilterSchema) |
60 | + throws IOException; | ||
59 | 61 | ||
60 | /** | 62 | /** |
61 | * Retrives part of the specified configuration based on the filterSchema. | 63 | * Retrives part of the specified configuration based on the filterSchema. |
... | @@ -64,7 +66,7 @@ public interface NetconfSession { | ... | @@ -64,7 +66,7 @@ public interface NetconfSession { |
64 | * @return true if the configuration was edited correctly | 66 | * @return true if the configuration was edited correctly |
65 | */ | 67 | */ |
66 | 68 | ||
67 | - boolean editConfig(String newConfiguration); | 69 | + boolean editConfig(String newConfiguration) throws IOException; |
68 | 70 | ||
69 | /** | 71 | /** |
70 | * Copies the new configuration, an Url or a complete configuration xml tree | 72 | * Copies the new configuration, an Url or a complete configuration xml tree |
... | @@ -75,7 +77,8 @@ public interface NetconfSession { | ... | @@ -75,7 +77,8 @@ public interface NetconfSession { |
75 | * @param newConfiguration configuration to set | 77 | * @param newConfiguration configuration to set |
76 | * @return true if the configuration was copied correctly | 78 | * @return true if the configuration was copied correctly |
77 | */ | 79 | */ |
78 | - boolean copyConfig(String targetConfiguration, String newConfiguration); | 80 | + boolean copyConfig(String targetConfiguration, String newConfiguration) |
81 | + throws IOException; | ||
79 | 82 | ||
80 | /** | 83 | /** |
81 | * Deletes part of the specified configuration based on the filterSchema. | 84 | * Deletes part of the specified configuration based on the filterSchema. |
... | @@ -83,28 +86,28 @@ public interface NetconfSession { | ... | @@ -83,28 +86,28 @@ public interface NetconfSession { |
83 | * @param targetConfiguration the name of the configuration to delete | 86 | * @param targetConfiguration the name of the configuration to delete |
84 | * @return true if the configuration was copied correctly | 87 | * @return true if the configuration was copied correctly |
85 | */ | 88 | */ |
86 | - boolean deleteConfig(String targetConfiguration); | 89 | + boolean deleteConfig(String targetConfiguration) throws IOException; |
87 | 90 | ||
88 | /** | 91 | /** |
89 | * Locks the candidate configuration. | 92 | * Locks the candidate configuration. |
90 | * | 93 | * |
91 | * @return true if successful. | 94 | * @return true if successful. |
92 | */ | 95 | */ |
93 | - boolean lock(); | 96 | + boolean lock() throws IOException; |
94 | 97 | ||
95 | /** | 98 | /** |
96 | * Unlocks the candidate configuration. | 99 | * Unlocks the candidate configuration. |
97 | * | 100 | * |
98 | * @return true if successful. | 101 | * @return true if successful. |
99 | */ | 102 | */ |
100 | - boolean unlock(); | 103 | + boolean unlock() throws IOException; |
101 | 104 | ||
102 | /** | 105 | /** |
103 | * Closes the Netconf session with the device. | 106 | * Closes the Netconf session with the device. |
104 | * the first time it tries gracefully, then kills it forcefully | 107 | * the first time it tries gracefully, then kills it forcefully |
105 | * @return true if closed | 108 | * @return true if closed |
106 | */ | 109 | */ |
107 | - boolean close(); | 110 | + boolean close() throws IOException; |
108 | 111 | ||
109 | /** | 112 | /** |
110 | * Gets the session ID of the Netconf session. | 113 | * Gets the session ID of the Netconf session. | ... | ... |
... | @@ -80,20 +80,19 @@ public class NetconfControllerImpl implements NetconfController { | ... | @@ -80,20 +80,19 @@ public class NetconfControllerImpl implements NetconfController { |
80 | 80 | ||
81 | @Override | 81 | @Override |
82 | public NetconfDevice getNetconfDevice(IpAddress ip, int port) { | 82 | public NetconfDevice getNetconfDevice(IpAddress ip, int port) { |
83 | - NetconfDevice device = null; | ||
84 | for (DeviceId info : netconfDeviceMap.keySet()) { | 83 | for (DeviceId info : netconfDeviceMap.keySet()) { |
85 | if (IpAddress.valueOf(info.uri().getHost()).equals(ip) && | 84 | if (IpAddress.valueOf(info.uri().getHost()).equals(ip) && |
86 | info.uri().getPort() == port) { | 85 | info.uri().getPort() == port) { |
87 | return netconfDeviceMap.get(info); | 86 | return netconfDeviceMap.get(info); |
88 | } | 87 | } |
89 | } | 88 | } |
90 | - return device; | 89 | + return null; |
91 | } | 90 | } |
92 | 91 | ||
93 | @Override | 92 | @Override |
94 | public NetconfDevice connectDevice(NetconfDeviceInfo deviceInfo) throws IOException { | 93 | public NetconfDevice connectDevice(NetconfDeviceInfo deviceInfo) throws IOException { |
95 | if (netconfDeviceMap.containsKey(deviceInfo.getDeviceId())) { | 94 | if (netconfDeviceMap.containsKey(deviceInfo.getDeviceId())) { |
96 | - log.info("Device {} is already present"); | 95 | + log.warn("Device {} is already present", deviceInfo); |
97 | return netconfDeviceMap.get(deviceInfo.getDeviceId()); | 96 | return netconfDeviceMap.get(deviceInfo.getDeviceId()); |
98 | } else { | 97 | } else { |
99 | log.info("Creating NETCONF device {}", deviceInfo); | 98 | log.info("Creating NETCONF device {}", deviceInfo); |
... | @@ -104,7 +103,7 @@ public class NetconfControllerImpl implements NetconfController { | ... | @@ -104,7 +103,7 @@ public class NetconfControllerImpl implements NetconfController { |
104 | @Override | 103 | @Override |
105 | public void removeDevice(NetconfDeviceInfo deviceInfo) { | 104 | public void removeDevice(NetconfDeviceInfo deviceInfo) { |
106 | if (netconfDeviceMap.containsKey(deviceInfo.getDeviceId())) { | 105 | if (netconfDeviceMap.containsKey(deviceInfo.getDeviceId())) { |
107 | - log.warn("Device {} is not present"); | 106 | + log.warn("Device {} is not present", deviceInfo); |
108 | } else { | 107 | } else { |
109 | stopDevice(deviceInfo); | 108 | stopDevice(deviceInfo); |
110 | } | 109 | } | ... | ... |
... | @@ -19,6 +19,8 @@ package org.onosproject.netconf.ctl; | ... | @@ -19,6 +19,8 @@ package org.onosproject.netconf.ctl; |
19 | import org.onosproject.netconf.NetconfDevice; | 19 | import org.onosproject.netconf.NetconfDevice; |
20 | import org.onosproject.netconf.NetconfDeviceInfo; | 20 | import org.onosproject.netconf.NetconfDeviceInfo; |
21 | import org.onosproject.netconf.NetconfSession; | 21 | import org.onosproject.netconf.NetconfSession; |
22 | +import org.slf4j.Logger; | ||
23 | +import org.slf4j.LoggerFactory; | ||
22 | 24 | ||
23 | import java.io.IOException; | 25 | import java.io.IOException; |
24 | 26 | ||
... | @@ -27,10 +29,12 @@ import java.io.IOException; | ... | @@ -27,10 +29,12 @@ import java.io.IOException; |
27 | */ | 29 | */ |
28 | public class NetconfDeviceImpl implements NetconfDevice { | 30 | public class NetconfDeviceImpl implements NetconfDevice { |
29 | 31 | ||
32 | + public static final Logger log = LoggerFactory | ||
33 | + .getLogger(NetconfSessionImpl.class); | ||
34 | + | ||
30 | private NetconfDeviceInfo netconfDeviceInfo; | 35 | private NetconfDeviceInfo netconfDeviceInfo; |
31 | private boolean deviceState = false; | 36 | private boolean deviceState = false; |
32 | private NetconfSession netconfSession; | 37 | private NetconfSession netconfSession; |
33 | - //private String config; | ||
34 | 38 | ||
35 | public NetconfDeviceImpl(NetconfDeviceInfo deviceInfo) throws IOException { | 39 | public NetconfDeviceImpl(NetconfDeviceInfo deviceInfo) throws IOException { |
36 | netconfDeviceInfo = deviceInfo; | 40 | netconfDeviceInfo = deviceInfo; |
... | @@ -40,7 +44,6 @@ public class NetconfDeviceImpl implements NetconfDevice { | ... | @@ -40,7 +44,6 @@ public class NetconfDeviceImpl implements NetconfDevice { |
40 | throw new IOException("Cannot create connection and session", e); | 44 | throw new IOException("Cannot create connection and session", e); |
41 | } | 45 | } |
42 | deviceState = true; | 46 | deviceState = true; |
43 | - //config = netconfSession.getConfig("running"); | ||
44 | } | 47 | } |
45 | 48 | ||
46 | @Override | 49 | @Override |
... | @@ -56,7 +59,11 @@ public class NetconfDeviceImpl implements NetconfDevice { | ... | @@ -56,7 +59,11 @@ public class NetconfDeviceImpl implements NetconfDevice { |
56 | @Override | 59 | @Override |
57 | public void disconnect() { | 60 | public void disconnect() { |
58 | deviceState = false; | 61 | deviceState = false; |
59 | - netconfSession.close(); | 62 | + try { |
63 | + netconfSession.close(); | ||
64 | + } catch (IOException e) { | ||
65 | + log.warn("Cannot communicate with the device {} ", netconfDeviceInfo); | ||
66 | + } | ||
60 | } | 67 | } |
61 | 68 | ||
62 | @Override | 69 | @Override | ... | ... |
... | @@ -18,6 +18,7 @@ package org.onosproject.netconf.ctl; | ... | @@ -18,6 +18,7 @@ package org.onosproject.netconf.ctl; |
18 | 18 | ||
19 | import ch.ethz.ssh2.Connection; | 19 | import ch.ethz.ssh2.Connection; |
20 | import ch.ethz.ssh2.Session; | 20 | import ch.ethz.ssh2.Session; |
21 | +import ch.ethz.ssh2.StreamGobbler; | ||
21 | import com.google.common.base.Preconditions; | 22 | import com.google.common.base.Preconditions; |
22 | import org.onosproject.netconf.NetconfDeviceInfo; | 23 | import org.onosproject.netconf.NetconfDeviceInfo; |
23 | import org.onosproject.netconf.NetconfSession; | 24 | import org.onosproject.netconf.NetconfSession; |
... | @@ -29,8 +30,7 @@ import java.io.IOException; | ... | @@ -29,8 +30,7 @@ import java.io.IOException; |
29 | import java.io.InputStreamReader; | 30 | import java.io.InputStreamReader; |
30 | import java.io.PrintWriter; | 31 | import java.io.PrintWriter; |
31 | import java.io.StringWriter; | 32 | import java.io.StringWriter; |
32 | -import java.util.ArrayList; | 33 | +import java.util.Collections; |
33 | -import java.util.Arrays; | ||
34 | import java.util.List; | 34 | import java.util.List; |
35 | 35 | ||
36 | /** | 36 | /** |
... | @@ -50,11 +50,9 @@ public class NetconfSessionImpl implements NetconfSession { | ... | @@ -50,11 +50,9 @@ public class NetconfSessionImpl implements NetconfSession { |
50 | private BufferedReader bufferReader = null; | 50 | private BufferedReader bufferReader = null; |
51 | private PrintWriter out = null; | 51 | private PrintWriter out = null; |
52 | private int messageID = 0; | 52 | private int messageID = 0; |
53 | - | 53 | + //TODO inject these capabilites from yang model provided by app |
54 | private List<String> deviceCapabilities = | 54 | private List<String> deviceCapabilities = |
55 | - new ArrayList<>( | 55 | + Collections.singletonList("urn:ietf:params:netconf:base:1.0"); |
56 | - Arrays.asList("urn:ietf:params:netconf:base:1.0")); | ||
57 | - | ||
58 | private String serverCapabilities; | 56 | private String serverCapabilities; |
59 | private String endpattern = "]]>]]>"; | 57 | private String endpattern = "]]>]]>"; |
60 | 58 | ||
... | @@ -98,8 +96,8 @@ public class NetconfSessionImpl implements NetconfSession { | ... | @@ -98,8 +96,8 @@ public class NetconfSessionImpl implements NetconfSession { |
98 | try { | 96 | try { |
99 | sshSession = netconfConnection.openSession(); | 97 | sshSession = netconfConnection.openSession(); |
100 | sshSession.startSubSystem("netconf"); | 98 | sshSession.startSubSystem("netconf"); |
101 | - bufferReader = new BufferedReader(new InputStreamReader( | 99 | + bufferReader = new BufferedReader(new InputStreamReader(new StreamGobbler( |
102 | - sshSession.getStdout())); | 100 | + sshSession.getStdout()))); |
103 | out = new PrintWriter(sshSession.getStdin()); | 101 | out = new PrintWriter(sshSession.getStdin()); |
104 | sendHello(); | 102 | sendHello(); |
105 | } catch (IOException e) { | 103 | } catch (IOException e) { |
... | @@ -127,51 +125,50 @@ public class NetconfSessionImpl implements NetconfSession { | ... | @@ -127,51 +125,50 @@ public class NetconfSessionImpl implements NetconfSession { |
127 | } | 125 | } |
128 | 126 | ||
129 | @Override | 127 | @Override |
130 | - public String doRPC(String request) { | 128 | + public String doRPC(String request) throws IOException { |
131 | - String reply = "ERROR"; | 129 | + String reply = doRequest(request); |
132 | - try { | 130 | + return checkReply(reply) ? reply : "ERROR " + reply; |
133 | - reply = doRequest(request); | ||
134 | - if (checkReply(reply)) { | ||
135 | - return reply; | ||
136 | - } else { | ||
137 | - return "ERROR " + reply; | ||
138 | - } | ||
139 | - } catch (IOException e) { | ||
140 | - log.error("Problem in the reading from the SSH connection " + e); | ||
141 | - } | ||
142 | - return reply; | ||
143 | } | 131 | } |
144 | 132 | ||
145 | private String doRequest(String request) throws IOException { | 133 | private String doRequest(String request) throws IOException { |
146 | - log.info("sshState " + sshSession.getState() + "request" + request); | 134 | + //log.info("sshState " + sshSession.getState() + "request" + request); |
135 | + checkAndRestablishSession(); | ||
136 | + //log.info("sshState after" + sshSession.getState()); | ||
137 | + out.print(request); | ||
138 | + out.flush(); | ||
139 | + messageID++; | ||
140 | + return readOne(); | ||
141 | + } | ||
142 | + | ||
143 | + private void checkAndRestablishSession() throws IOException { | ||
147 | if (sshSession.getState() != 2) { | 144 | if (sshSession.getState() != 2) { |
148 | try { | 145 | try { |
149 | startSshSession(); | 146 | startSshSession(); |
150 | } catch (IOException e) { | 147 | } catch (IOException e) { |
151 | log.info("the connection had to be reopened"); | 148 | log.info("the connection had to be reopened"); |
152 | - startConnection(); | 149 | + try { |
150 | + startConnection(); | ||
151 | + } catch (IOException e2) { | ||
152 | + log.error("No connection {} for device, exception {}", netconfConnection, e2); | ||
153 | + throw new IOException(e.getMessage()); | ||
154 | + //TODO remove device from ONOS | ||
155 | + } | ||
153 | } | 156 | } |
154 | - sendHello(); | ||
155 | } | 157 | } |
156 | - log.info("sshState after" + sshSession.getState()); | ||
157 | - out.print(request); | ||
158 | - out.flush(); | ||
159 | - messageID++; | ||
160 | - return readOne(); | ||
161 | } | 158 | } |
162 | 159 | ||
163 | @Override | 160 | @Override |
164 | - public String get(String request) { | 161 | + public String get(String request) throws IOException { |
165 | return doRPC(request); | 162 | return doRPC(request); |
166 | } | 163 | } |
167 | 164 | ||
168 | @Override | 165 | @Override |
169 | - public String getConfig(String targetConfiguration) { | 166 | + public String getConfig(String targetConfiguration) throws IOException { |
170 | return getConfig(targetConfiguration, null); | 167 | return getConfig(targetConfiguration, null); |
171 | } | 168 | } |
172 | 169 | ||
173 | @Override | 170 | @Override |
174 | - public String getConfig(String targetConfiguration, String configurationSchema) { | 171 | + public String getConfig(String targetConfiguration, String configurationSchema) throws IOException { |
175 | StringBuilder rpc = new StringBuilder("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); | 172 | StringBuilder rpc = new StringBuilder("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); |
176 | rpc.append("<rpc message-id=\"" + messageID + "\" " | 173 | rpc.append("<rpc message-id=\"" + messageID + "\" " |
177 | + "xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n"); | 174 | + "xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n"); |
... | @@ -187,30 +184,19 @@ public class NetconfSessionImpl implements NetconfSession { | ... | @@ -187,30 +184,19 @@ public class NetconfSessionImpl implements NetconfSession { |
187 | rpc.append("</get-config>\n"); | 184 | rpc.append("</get-config>\n"); |
188 | rpc.append("</rpc>\n"); | 185 | rpc.append("</rpc>\n"); |
189 | rpc.append(endpattern); | 186 | rpc.append(endpattern); |
190 | - String reply = null; | 187 | + String reply = doRequest(rpc.toString()); |
191 | - try { | 188 | + return checkReply(reply) ? reply : "ERROR " + reply; |
192 | - reply = doRequest(rpc.toString()); | ||
193 | - } catch (IOException e) { | ||
194 | - e.printStackTrace(); | ||
195 | - } | ||
196 | - | ||
197 | - return checkReply(reply) ? reply : null; | ||
198 | } | 189 | } |
199 | 190 | ||
200 | @Override | 191 | @Override |
201 | - public boolean editConfig(String newConfiguration) { | 192 | + public boolean editConfig(String newConfiguration) throws IOException { |
202 | newConfiguration = newConfiguration + endpattern; | 193 | newConfiguration = newConfiguration + endpattern; |
203 | - String reply = null; | 194 | + return checkReply(doRequest(newConfiguration)); |
204 | - try { | ||
205 | - reply = doRequest(newConfiguration); | ||
206 | - } catch (IOException e) { | ||
207 | - e.printStackTrace(); | ||
208 | - } | ||
209 | - return checkReply(reply); | ||
210 | } | 195 | } |
211 | 196 | ||
212 | @Override | 197 | @Override |
213 | - public boolean copyConfig(String targetConfiguration, String newConfiguration) { | 198 | + public boolean copyConfig(String targetConfiguration, String newConfiguration) |
199 | + throws IOException { | ||
214 | newConfiguration = newConfiguration.trim(); | 200 | newConfiguration = newConfiguration.trim(); |
215 | if (!newConfiguration.startsWith("<configuration>")) { | 201 | if (!newConfiguration.startsWith("<configuration>")) { |
216 | newConfiguration = "<configuration>" + newConfiguration | 202 | newConfiguration = "<configuration>" + newConfiguration |
... | @@ -229,18 +215,11 @@ public class NetconfSessionImpl implements NetconfSession { | ... | @@ -229,18 +215,11 @@ public class NetconfSessionImpl implements NetconfSession { |
229 | rpc.append("</copy-config>"); | 215 | rpc.append("</copy-config>"); |
230 | rpc.append("</rpc>"); | 216 | rpc.append("</rpc>"); |
231 | rpc.append(endpattern); | 217 | rpc.append(endpattern); |
232 | - String reply = null; | 218 | + return checkReply(doRequest(rpc.toString())); |
233 | - try { | ||
234 | - reply = doRequest(rpc.toString()); | ||
235 | - } catch (IOException e) { | ||
236 | - e.printStackTrace(); | ||
237 | - } | ||
238 | - | ||
239 | - return checkReply(reply); | ||
240 | } | 219 | } |
241 | 220 | ||
242 | @Override | 221 | @Override |
243 | - public boolean deleteConfig(String targetConfiguration) { | 222 | + public boolean deleteConfig(String targetConfiguration) throws IOException { |
244 | if (targetConfiguration.equals("running")) { | 223 | if (targetConfiguration.equals("running")) { |
245 | log.warn("Target configuration for delete operation can't be \"running\"", | 224 | log.warn("Target configuration for delete operation can't be \"running\"", |
246 | targetConfiguration); | 225 | targetConfiguration); |
... | @@ -256,18 +235,11 @@ public class NetconfSessionImpl implements NetconfSession { | ... | @@ -256,18 +235,11 @@ public class NetconfSessionImpl implements NetconfSession { |
256 | rpc.append("</delete-config>"); | 235 | rpc.append("</delete-config>"); |
257 | rpc.append("</rpc>"); | 236 | rpc.append("</rpc>"); |
258 | rpc.append(endpattern); | 237 | rpc.append(endpattern); |
259 | - String reply = null; | 238 | + return checkReply(doRequest(rpc.toString())); |
260 | - try { | ||
261 | - reply = doRequest(rpc.toString()); | ||
262 | - } catch (IOException e) { | ||
263 | - e.printStackTrace(); | ||
264 | - } | ||
265 | - | ||
266 | - return checkReply(reply); | ||
267 | } | 239 | } |
268 | 240 | ||
269 | @Override | 241 | @Override |
270 | - public boolean lock() { | 242 | + public boolean lock() throws IOException { |
271 | StringBuilder rpc = new StringBuilder("<?xml version=\"1.0\" " + | 243 | StringBuilder rpc = new StringBuilder("<?xml version=\"1.0\" " + |
272 | "encoding=\"UTF-8\"?>"); | 244 | "encoding=\"UTF-8\"?>"); |
273 | rpc.append("<rpc>"); | 245 | rpc.append("<rpc>"); |
... | @@ -278,17 +250,11 @@ public class NetconfSessionImpl implements NetconfSession { | ... | @@ -278,17 +250,11 @@ public class NetconfSessionImpl implements NetconfSession { |
278 | rpc.append("</lock>"); | 250 | rpc.append("</lock>"); |
279 | rpc.append("</rpc>"); | 251 | rpc.append("</rpc>"); |
280 | rpc.append(endpattern); | 252 | rpc.append(endpattern); |
281 | - String reply = null; | 253 | + return checkReply(doRequest(rpc.toString())); |
282 | - try { | ||
283 | - reply = doRequest(rpc.toString()); | ||
284 | - } catch (IOException e) { | ||
285 | - e.printStackTrace(); | ||
286 | - } | ||
287 | - return checkReply(reply); | ||
288 | } | 254 | } |
289 | 255 | ||
290 | @Override | 256 | @Override |
291 | - public boolean unlock() { | 257 | + public boolean unlock() throws IOException { |
292 | StringBuilder rpc = new StringBuilder("<?xml version=\"1.0\" " + | 258 | StringBuilder rpc = new StringBuilder("<?xml version=\"1.0\" " + |
293 | "encoding=\"UTF-8\"?>"); | 259 | "encoding=\"UTF-8\"?>"); |
294 | rpc.append("<rpc>"); | 260 | rpc.append("<rpc>"); |
... | @@ -299,21 +265,15 @@ public class NetconfSessionImpl implements NetconfSession { | ... | @@ -299,21 +265,15 @@ public class NetconfSessionImpl implements NetconfSession { |
299 | rpc.append("</unlock>"); | 265 | rpc.append("</unlock>"); |
300 | rpc.append("</rpc>"); | 266 | rpc.append("</rpc>"); |
301 | rpc.append(endpattern); | 267 | rpc.append(endpattern); |
302 | - String reply = null; | 268 | + return checkReply(doRequest(rpc.toString())); |
303 | - try { | ||
304 | - reply = doRequest(rpc.toString()); | ||
305 | - } catch (IOException e) { | ||
306 | - e.printStackTrace(); | ||
307 | - } | ||
308 | - return checkReply(reply); | ||
309 | } | 269 | } |
310 | 270 | ||
311 | @Override | 271 | @Override |
312 | - public boolean close() { | 272 | + public boolean close() throws IOException { |
313 | return close(false); | 273 | return close(false); |
314 | } | 274 | } |
315 | 275 | ||
316 | - private boolean close(boolean force) { | 276 | + private boolean close(boolean force) throws IOException { |
317 | StringBuilder rpc = new StringBuilder(); | 277 | StringBuilder rpc = new StringBuilder(); |
318 | rpc.append("<rpc>"); | 278 | rpc.append("<rpc>"); |
319 | if (force) { | 279 | if (force) { |
... | @@ -324,7 +284,7 @@ public class NetconfSessionImpl implements NetconfSession { | ... | @@ -324,7 +284,7 @@ public class NetconfSessionImpl implements NetconfSession { |
324 | rpc.append("<close-configuration/>"); | 284 | rpc.append("<close-configuration/>"); |
325 | rpc.append("</rpc>"); | 285 | rpc.append("</rpc>"); |
326 | rpc.append(endpattern); | 286 | rpc.append(endpattern); |
327 | - return checkReply(rpc.toString()) ? true : close(true); | 287 | + return checkReply(doRequest(rpc.toString())) || close(true); |
328 | } | 288 | } |
329 | 289 | ||
330 | @Override | 290 | @Override | ... | ... |
... | @@ -40,7 +40,6 @@ import org.onosproject.net.device.DeviceDescription; | ... | @@ -40,7 +40,6 @@ import org.onosproject.net.device.DeviceDescription; |
40 | import org.onosproject.net.device.DeviceProvider; | 40 | import org.onosproject.net.device.DeviceProvider; |
41 | import org.onosproject.net.device.DeviceProviderRegistry; | 41 | import org.onosproject.net.device.DeviceProviderRegistry; |
42 | import org.onosproject.net.device.DeviceProviderService; | 42 | import org.onosproject.net.device.DeviceProviderService; |
43 | -import org.onosproject.net.device.DeviceService; | ||
44 | import org.onosproject.net.provider.AbstractProvider; | 43 | import org.onosproject.net.provider.AbstractProvider; |
45 | import org.onosproject.net.provider.ProviderId; | 44 | import org.onosproject.net.provider.ProviderId; |
46 | import org.onosproject.netconf.NetconfController; | 45 | import org.onosproject.netconf.NetconfController; |
... | @@ -66,8 +65,8 @@ public class NetconfDeviceProvider extends AbstractProvider | ... | @@ -66,8 +65,8 @@ public class NetconfDeviceProvider extends AbstractProvider |
66 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | 65 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) |
67 | protected DeviceProviderRegistry providerRegistry; | 66 | protected DeviceProviderRegistry providerRegistry; |
68 | 67 | ||
69 | - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | 68 | + // @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) |
70 | - protected DeviceService deviceService; | 69 | +// protected DeviceService deviceService; |
71 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | 70 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) |
72 | protected NetconfController controller; //where is initiated ? | 71 | protected NetconfController controller; //where is initiated ? |
73 | 72 | ||
... | @@ -156,7 +155,6 @@ public class NetconfDeviceProvider extends AbstractProvider | ... | @@ -156,7 +155,6 @@ public class NetconfDeviceProvider extends AbstractProvider |
156 | public void deviceAdded(NetconfDeviceInfo nodeId) { | 155 | public void deviceAdded(NetconfDeviceInfo nodeId) { |
157 | Preconditions.checkNotNull(nodeId, ISNOTNULL); | 156 | Preconditions.checkNotNull(nodeId, ISNOTNULL); |
158 | DeviceId deviceId = nodeId.getDeviceId(); | 157 | DeviceId deviceId = nodeId.getDeviceId(); |
159 | - //TODO filter for not netconf devices | ||
160 | //Netconf configuration object | 158 | //Netconf configuration object |
161 | ChassisId cid = new ChassisId(); | 159 | ChassisId cid = new ChassisId(); |
162 | String ipAddress = nodeId.ip().toString(); | 160 | String ipAddress = nodeId.ip().toString(); |
... | @@ -191,7 +189,6 @@ public class NetconfDeviceProvider extends AbstractProvider | ... | @@ -191,7 +189,6 @@ public class NetconfDeviceProvider extends AbstractProvider |
191 | private void connectDevices() { | 189 | private void connectDevices() { |
192 | NetconfProviderConfig cfg = cfgService.getConfig(appId, NetconfProviderConfig.class); | 190 | NetconfProviderConfig cfg = cfgService.getConfig(appId, NetconfProviderConfig.class); |
193 | if (cfg != null) { | 191 | if (cfg != null) { |
194 | - log.info("cfg {}", cfg); | ||
195 | try { | 192 | try { |
196 | cfg.getDevicesAddresses().stream() | 193 | cfg.getDevicesAddresses().stream() |
197 | .forEach(addr -> { | 194 | .forEach(addr -> { |
... | @@ -204,8 +201,8 @@ public class NetconfDeviceProvider extends AbstractProvider | ... | @@ -204,8 +201,8 @@ public class NetconfDeviceProvider extends AbstractProvider |
204 | } catch (IOException e) { | 201 | } catch (IOException e) { |
205 | log.warn("Can't connect to NETCONF " + | 202 | log.warn("Can't connect to NETCONF " + |
206 | "device on {}:{}", | 203 | "device on {}:{}", |
207 | - addr.ip(), | 204 | + addr.ip(), |
208 | - addr.port()); | 205 | + addr.port()); |
209 | } | 206 | } |
210 | } | 207 | } |
211 | ); | 208 | ); | ... | ... |
1 | { | 1 | { |
2 | "devices":{ | 2 | "devices":{ |
3 | - "netconf:mininet@10.1.9.24:1830":{ | 3 | + "netconf:mininet@10.1.9.24:830":{ |
4 | "basic":{ | 4 | "basic":{ |
5 | "driver":"ovs-netconf" | 5 | "driver":"ovs-netconf" |
6 | } | 6 | } |
... | @@ -12,7 +12,7 @@ | ... | @@ -12,7 +12,7 @@ |
12 | "name":"mininet", | 12 | "name":"mininet", |
13 | "password":"mininet", | 13 | "password":"mininet", |
14 | "ip":"10.1.9.24", | 14 | "ip":"10.1.9.24", |
15 | - "port":1830 | 15 | + "port":830 |
16 | }] | 16 | }] |
17 | } | 17 | } |
18 | } | 18 | } | ... | ... |
-
Please register or login to post a comment