Pavlin Radoslavov
Committed by Gerrit Code Review

Work toward ONOS-1268 Expose IPv6 support at the ONOS CLI level

* Automatically assign the Ethtype based on the IP address version
  for the "--ipSrc" and "--ipDst" arguments

* Fix a typo in the --ipSrc and --ipDst description

* Check whether the --ipSrc and --ipDst address versions are same

Change-Id: Iaac98987b070c5fed97a7f6eb4c544f1578effcd
......@@ -60,11 +60,11 @@ public abstract class ConnectivityIntentCommand extends AbstractShellCommand {
required = false, multiValued = false)
private String ipProtoString = null;
@Option(name = "--ipSrc", description = "Source IP Address",
@Option(name = "--ipSrc", description = "Source IP Prefix",
required = false, multiValued = false)
private String srcIpString = null;
@Option(name = "--ipDst", description = "Destination IP Address",
@Option(name = "--ipDst", description = "Destination IP Prefix",
required = false, multiValued = false)
private String dstIpString = null;
......@@ -109,9 +109,47 @@ public abstract class ConnectivityIntentCommand extends AbstractShellCommand {
* @return traffic selector
*/
protected TrafficSelector buildTrafficSelector() {
IpPrefix srcIpPrefix = null;
IpPrefix dstIpPrefix = null;
TrafficSelector.Builder selectorBuilder = DefaultTrafficSelector.builder();
short ethType = EthType.IPV4.value();
if (!isNullOrEmpty(srcIpString)) {
srcIpPrefix = IpPrefix.valueOf(srcIpString);
if (srcIpPrefix.isIp4()) {
selectorBuilder.matchIPSrc(srcIpPrefix);
} else {
selectorBuilder.matchIPv6Src(srcIpPrefix);
}
}
if (!isNullOrEmpty(dstIpString)) {
dstIpPrefix = IpPrefix.valueOf(dstIpString);
if (dstIpPrefix.isIp4()) {
selectorBuilder.matchIPDst(dstIpPrefix);
} else {
selectorBuilder.matchIPv6Dst(dstIpPrefix);
}
}
if ((srcIpPrefix != null) && (dstIpPrefix != null) &&
(srcIpPrefix.version() != dstIpPrefix.version())) {
// ERROR: IP src/dst version mismatch
throw new IllegalArgumentException(
"IP source and destination version mismatch");
}
//
// Set the default EthType based on the IP version if the matching
// source or destination IP prefixes.
//
short ethType = EthType.IPV4.value();
if ((srcIpPrefix != null) && srcIpPrefix.isIp6()) {
ethType = EthType.IPV6.value();
}
if ((dstIpPrefix != null) && dstIpPrefix.isIp6()) {
ethType = EthType.IPV6.value();
}
if (!isNullOrEmpty(ethTypeString)) {
ethType = EthType.parseFromString(ethTypeString);
}
......@@ -130,14 +168,6 @@ public abstract class ConnectivityIntentCommand extends AbstractShellCommand {
selectorBuilder.matchIPProtocol((byte) ipProtoShort);
}
if (!isNullOrEmpty(srcIpString)) {
selectorBuilder.matchIPSrc(IpPrefix.valueOf(srcIpString));
}
if (!isNullOrEmpty(dstIpString)) {
selectorBuilder.matchIPDst(IpPrefix.valueOf(dstIpString));
}
if (!isNullOrEmpty(srcTcpString)) {
selectorBuilder.matchTcpSrc((short) Integer.parseInt(srcTcpString));
}
......