| /* |
| * Copyright 2016 Open Networking Laboratory |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package org.onosproject.drivers.fujitsu; |
| |
| import org.onosproject.drivers.utilities.XmlConfigParser; |
| import org.onosproject.net.behaviour.PortDiscovery; |
| import org.onosproject.net.device.PortDescription; |
| import org.onosproject.net.driver.AbstractHandlerBehaviour; |
| import org.onosproject.netconf.NetconfController; |
| import org.onosproject.netconf.NetconfException; |
| import org.onosproject.netconf.NetconfSession; |
| import org.slf4j.Logger; |
| |
| import java.io.ByteArrayInputStream; |
| import java.io.IOException; |
| import java.util.List; |
| |
| import static com.google.common.base.Preconditions.checkNotNull; |
| import static org.slf4j.LoggerFactory.getLogger; |
| |
| /** |
| * Retrieves the ports from a Fujitsu T100 device via netconf. |
| */ |
| public class PortGetterFujitsuImpl extends AbstractHandlerBehaviour |
| implements PortDiscovery { |
| |
| private final Logger log = getLogger(getClass()); |
| |
| @Override |
| public List<PortDescription> getPorts() { |
| NetconfController controller = checkNotNull(handler().get(NetconfController.class)); |
| NetconfSession session = controller.getDevicesMap().get(handler().data().deviceId()).getSession(); |
| String reply; |
| try { |
| reply = session.get(requestBuilder()); |
| } catch (IOException e) { |
| throw new RuntimeException(new NetconfException("Failed to retrieve configuration.", e)); |
| } |
| List<PortDescription> descriptions = XmlConfigParser. |
| parseFujitsuT100Ports(XmlConfigParser. |
| loadXml(new ByteArrayInputStream(reply.getBytes()))); |
| return descriptions; |
| } |
| |
| /** |
| * Builds a request crafted to get the configuration required to create port |
| * descriptions for the device. |
| * @return The request string. |
| */ |
| private String requestBuilder() { |
| StringBuilder rpc = new StringBuilder("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); |
| //Message ID is injected later. |
| rpc.append("<rpc xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">"); |
| rpc.append("<get>"); |
| rpc.append("<filter type=\"subtree\">"); |
| rpc.append("<interfaces xmlns=\"urn:ietf:params:xml:ns:yang:ietf-interfaces\">"); |
| rpc.append("</interfaces>"); |
| rpc.append("</filter>"); |
| rpc.append("</get>"); |
| rpc.append("</rpc>"); |
| return rpc.toString(); |
| } |
| } |