fix juniper driver
- fix wrong NBR for get devices info
- fix port number: the format of the port generated by
PortNumber.fromString is not supported by the cli and netcfg
- the errors are reported in the log without throwing an exception
Change-Id: Idd456055e2e1b50185d6987866b066441ce5a15a
diff --git a/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/DeviceDiscoveryJuniperImpl.java b/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/DeviceDiscoveryJuniperImpl.java
index e277d7e..fc53137 100644
--- a/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/DeviceDiscoveryJuniperImpl.java
+++ b/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/DeviceDiscoveryJuniperImpl.java
@@ -18,6 +18,7 @@
import com.google.common.annotations.Beta;
+import com.google.common.collect.ImmutableList;
import org.onosproject.drivers.utilities.XmlConfigParser;
import org.onosproject.net.DeviceId;
import org.onosproject.net.device.DeviceDescription;
@@ -25,7 +26,6 @@
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 java.io.ByteArrayInputStream;
@@ -33,7 +33,6 @@
import java.util.List;
import static com.google.common.base.Preconditions.checkNotNull;
-import static org.onosproject.drivers.juniper.JuniperUtils.FAILED_CFG;
import static org.onosproject.drivers.juniper.JuniperUtils.REQ_IF_INFO;
import static org.onosproject.drivers.juniper.JuniperUtils.REQ_MAC_ADD_INFO;
import static org.onosproject.drivers.juniper.JuniperUtils.REQ_SYS_INFO;
@@ -52,19 +51,20 @@
@Override
public DeviceDescription discoverDeviceDetails() {
- DeviceId deviceId = handler().data().deviceId();
+ DeviceId devId = handler().data().deviceId();
NetconfController controller = checkNotNull(handler().get(NetconfController.class));
- NetconfSession session = controller.getDevicesMap().get(deviceId).getSession();
+ NetconfSession session = controller.getDevicesMap().get(devId).getSession();
String sysInfo;
String chassis;
try {
sysInfo = session.get(requestBuilder(REQ_SYS_INFO));
chassis = session.get(requestBuilder(REQ_MAC_ADD_INFO));
} catch (IOException e) {
- throw new RuntimeException(new NetconfException(FAILED_CFG, e));
+ log.warn("Failed to retrieve device details for {}", devId);
+ return null;
}
DeviceDescription description =
- JuniperUtils.parseJuniperDescription(deviceId, XmlConfigParser.
+ JuniperUtils.parseJuniperDescription(devId, XmlConfigParser.
loadXml(new ByteArrayInputStream(sysInfo.getBytes())), chassis);
log.debug("Device description {}", description);
return description;
@@ -72,13 +72,15 @@
@Override
public List<PortDescription> discoverPortDetails() {
+ DeviceId devId = handler().data().deviceId();
NetconfController controller = checkNotNull(handler().get(NetconfController.class));
- NetconfSession session = controller.getDevicesMap().get(handler().data().deviceId()).getSession();
+ NetconfSession session = controller.getDevicesMap().get(devId).getSession();
String reply;
try {
reply = session.get(requestBuilder(REQ_IF_INFO));
} catch (IOException e) {
- throw new RuntimeException(new NetconfException(FAILED_CFG, e));
+ log.warn("Failed to retrieve ports for device {}", devId);
+ return ImmutableList.of();
}
List<PortDescription> descriptions =
JuniperUtils.parseJuniperPorts(XmlConfigParser.
diff --git a/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/JuniperUtils.java b/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/JuniperUtils.java
index 7d771cb..d6a1918 100644
--- a/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/JuniperUtils.java
+++ b/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/JuniperUtils.java
@@ -64,7 +64,8 @@
public static final String REQ_IF_INFO = "<get-interface-information/>";
//helper strings for parsing
- private static final String LLDP_NBR_INFO = "lldp-neighbors-information";
+ private static final String LLDP_LIST_NBR_INFO = "lldp-neighbors-information";
+ private static final String LLDP_NBR_INFO = "lldp-neighbor-information";
private static final String SYS_INFO = "system-information";
private static final String HW_MODEL = "hardware-model";
private static final String OS_NAME = "os-name";
@@ -230,7 +231,7 @@
.set("index", index);
setIpIfPresent(cfg, annotationsBuilder);
- PortNumber portNumber = portNumberFromName(cfg.getString(IF_LO_INDEX), name);
+ PortNumber portNumber = PortNumber.portNumber(index);
boolean enabled = false;
if (cfg.getString(IF_LO_STATUS) != null) {
@@ -245,18 +246,6 @@
annotationsBuilder.build());
}
- private static PortNumber portNumberFromName(String ifIndex, String name) {
- PortNumber portNumber = portNumber(ifIndex);
- if (name.contains("-")) {
- String[] splitted = name.split("-");
- String typeInt = "[" + splitted[0] + "]";
- String number = splitted[1].replace("/", "");
- number = "(" + number + ")";
- portNumber = PortNumber.fromString(typeInt + number);
- }
- return portNumber;
- }
-
private static void setIpIfPresent(HierarchicalConfiguration cfg,
Builder annotationsBuilder) {
String ip = cfg.getString(IF_LO_ADD);
@@ -302,7 +291,7 @@
public static Set<LinkAbstraction> parseJuniperLldp(HierarchicalConfiguration info) {
Set<LinkAbstraction> neighbour = new HashSet<>();
List<HierarchicalConfiguration> subtrees =
- info.configurationsAt(LLDP_NBR_INFO);
+ info.configurationsAt(LLDP_LIST_NBR_INFO);
for (HierarchicalConfiguration neighborsInfo : subtrees) {
List<HierarchicalConfiguration> neighbors =
neighborsInfo.configurationsAt(LLDP_NBR_INFO);
diff --git a/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/LinkDiscoveryJuniperImpl.java b/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/LinkDiscoveryJuniperImpl.java
index ba346d5..2b99faa 100644
--- a/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/LinkDiscoveryJuniperImpl.java
+++ b/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/LinkDiscoveryJuniperImpl.java
@@ -16,9 +16,8 @@
package org.onosproject.drivers.juniper;
-//import com.google.common.base.Optional;
-
import com.google.common.annotations.Beta;
+import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import org.onosproject.drivers.utilities.XmlConfigParser;
import org.onosproject.net.Device;
@@ -29,7 +28,6 @@
import org.onosproject.net.driver.AbstractHandlerBehaviour;
import org.onosproject.net.link.LinkDescription;
import org.onosproject.netconf.NetconfController;
-import org.onosproject.netconf.NetconfException;
import org.onosproject.netconf.NetconfSession;
import org.slf4j.Logger;
@@ -45,7 +43,6 @@
import static org.onosproject.drivers.juniper.JuniperUtils.requestBuilder;
import static org.onosproject.net.AnnotationKeys.PORT_NAME;
import static org.onosproject.drivers.juniper.JuniperUtils.REQ_LLDP_NBR_INFO;
-import static org.onosproject.drivers.juniper.JuniperUtils.FAILED_CFG;
import static org.slf4j.LoggerFactory.getLogger;
@@ -71,7 +68,8 @@
try {
reply = session.get(requestBuilder(REQ_LLDP_NBR_INFO));
} catch (IOException e) {
- throw new RuntimeException(new NetconfException(FAILED_CFG, e));
+ log.warn("Failed to retrieve ports for device {}", localDeviceId);
+ return ImmutableSet.of();
}
log.debug("Reply from device {} : {}", localDeviceId, reply);
Set<LinkAbstraction> linkAbstractions = parseJuniperLldp(