[CORD-2226] Dhcp6 Relay uses to store dhcp record for LeaseQuery
Change-Id: Ib3baadb38e3f5f6ebe6efc884660fe0c77cfe689
diff --git a/apps/dhcprelay/src/main/java/org/onosproject/dhcprelay/cli/DhcpRelayCommand.java b/apps/dhcprelay/src/main/java/org/onosproject/dhcprelay/cli/DhcpRelayCommand.java
index bd41ecf..e872971 100644
--- a/apps/dhcprelay/src/main/java/org/onosproject/dhcprelay/cli/DhcpRelayCommand.java
+++ b/apps/dhcprelay/src/main/java/org/onosproject/dhcprelay/cli/DhcpRelayCommand.java
@@ -49,6 +49,8 @@
private static final String NA = "N/A";
private static final String STATUS_FMT = "[%s, %s]";
private static final String STATUS_FMT_NH = "[%s via %s, %s]";
+ private static final String STATUS_FMT_V6 = "[%s, %s, %s]";
+ private static final String STATUS_FMT_V6_NH = "[%s, %s via %s, %s]";
private static final String DEFAULT_SERVERS = "Default DHCP servers:";
private static final String INDIRECT_SERVERS = "Indirect DHCP servers:";
@@ -135,13 +137,22 @@
}
private String ip6State(DhcpRecord record) {
- String nextHopIp = findNextHopIp(IpAddress::isIp6,
+ String nextHopIp = findNextHopIp6(IpAddress::isIp6,
record.nextHop().orElse(null),
record.vlanId());
- return ipState(record.ip6Address().map(Object::toString).orElse(NA),
- record.ip6Status().map(Object::toString).orElse(NA),
- record.directlyConnected(),
- nextHopIp);
+
+ if (record.directlyConnected()) {
+ return String.format(STATUS_FMT_V6,
+ record.ip6Address().map(Object::toString).orElse(NA),
+ record.pdPrefix().map(Object::toString).orElse(NA),
+ record.ip6Status().map(Object::toString).orElse(NA));
+ } else {
+ return String.format(STATUS_FMT_V6_NH,
+ record.ip6Address().map(Object::toString).orElse(NA),
+ record.pdPrefix().map(Object::toString).orElse(NA),
+ nextHopIp,
+ record.ip6Status().map(Object::toString).orElse(NA));
+ }
}
private String ipState(String ipAddress, String status,
@@ -158,6 +169,7 @@
if (ipFilter == null || nextHopMac == null || vlanId == null) {
return NA;
}
+
Host host = HOST_SERVICE.getHost(HostId.hostId(nextHopMac, vlanId));
if (host == null) {
return NA;
@@ -169,4 +181,21 @@
.findFirst()
.orElse(NA);
}
+
+ private String findNextHopIp6(Predicate<IpAddress> ipFilter, MacAddress nextHopMac, VlanId vlanId) {
+ if (ipFilter == null || nextHopMac == null || vlanId == null) {
+ return NA;
+ }
+
+ Host host = HOST_SERVICE.getHost(HostId.hostId(nextHopMac, vlanId));
+ if (host == null) {
+ return NA;
+ }
+ return host.ipAddresses().stream()
+ .filter(ipFilter)
+ .filter(ip -> ip.isLinkLocal())
+ .map(Object::toString)
+ .findFirst()
+ .orElse(NA);
+ }
}