diff --git a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtNetwork.java b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtNetwork.java index 73c96f0739..2745e46a5e 100644 --- a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtNetwork.java +++ b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtNetwork.java @@ -53,6 +53,7 @@ public final class DefaultKubevirtNetwork implements KubevirtNetwork { private final Integer mtu; private final String segmentId; private final IpAddress gatewayIp; + private final boolean defaultRoute; private final String cidr; private final Set hostRoutes; private final KubevirtIpPool ipPool; @@ -67,6 +68,7 @@ public final class DefaultKubevirtNetwork implements KubevirtNetwork { * @param mtu network MTU * @param segmentId segment identifier * @param gatewayIp gateway IP address + * @param defaultRoute default route * @param cidr CIDR of network * @param hostRoutes a set of host routes * @param ipPool IP pool @@ -74,7 +76,8 @@ public final class DefaultKubevirtNetwork implements KubevirtNetwork { */ public DefaultKubevirtNetwork(String networkId, Type type, String name, Integer mtu, String segmentId, IpAddress gatewayIp, - String cidr, Set hostRoutes, + boolean defaultRoute, String cidr, + Set hostRoutes, KubevirtIpPool ipPool, Set dnses) { this.networkId = networkId; this.type = type; @@ -82,6 +85,7 @@ public final class DefaultKubevirtNetwork implements KubevirtNetwork { this.mtu = mtu; this.segmentId = segmentId; this.gatewayIp = gatewayIp; + this.defaultRoute = defaultRoute; this.cidr = cidr; this.hostRoutes = hostRoutes; this.ipPool = ipPool; @@ -132,6 +136,11 @@ public final class DefaultKubevirtNetwork implements KubevirtNetwork { } } + @Override + public boolean defaultRoute() { + return defaultRoute; + } + @Override public KubevirtIpPool ipPool() { return ipPool; @@ -196,7 +205,7 @@ public final class DefaultKubevirtNetwork implements KubevirtNetwork { DefaultKubevirtNetwork that = (DefaultKubevirtNetwork) o; return networkId.equals(that.networkId) && type == that.type && name.equals(that.name) && mtu.equals(that.mtu) && - gatewayIp.equals(that.gatewayIp) && + gatewayIp.equals(that.gatewayIp) && defaultRoute == that.defaultRoute && cidr.equals(that.cidr) && hostRoutes.equals(that.hostRoutes) && ipPool.equals(that.ipPool) && dnses.equals(that.dnses); @@ -205,7 +214,7 @@ public final class DefaultKubevirtNetwork implements KubevirtNetwork { @Override public int hashCode() { return Objects.hash(networkId, type, name, mtu, segmentId, gatewayIp, - cidr, hostRoutes, ipPool, dnses); + defaultRoute, cidr, hostRoutes, ipPool, dnses); } @Override @@ -217,6 +226,7 @@ public final class DefaultKubevirtNetwork implements KubevirtNetwork { .add("mtu", mtu) .add("segmentId", segmentId) .add("gatewayIp", gatewayIp) + .add("defaultRoute", defaultRoute) .add("cidr", cidr) .add("hostRouts", hostRoutes) .add("ipPool", ipPool) @@ -263,6 +273,7 @@ public final class DefaultKubevirtNetwork implements KubevirtNetwork { private Integer mtu; private String segmentId; private IpAddress gatewayIp; + private boolean defaultRoute; private String cidr; private Set hostRouts; private KubevirtIpPool ipPool; @@ -274,7 +285,6 @@ public final class DefaultKubevirtNetwork implements KubevirtNetwork { checkArgument(type != null, NOT_NULL_MSG, "type"); checkArgument(name != null, NOT_NULL_MSG, "name"); checkArgument(mtu != null, NOT_NULL_MSG, "mtu"); - checkArgument(gatewayIp != null, NOT_NULL_MSG, "gatewayIp"); checkArgument(cidr != null, NOT_NULL_MSG, "cidr"); checkArgument(ipPool != null, NOT_NULL_MSG, "ipPool"); @@ -287,7 +297,7 @@ public final class DefaultKubevirtNetwork implements KubevirtNetwork { } return new DefaultKubevirtNetwork(networkId, type, name, mtu, segmentId, - gatewayIp, cidr, hostRouts, ipPool, dnses); + gatewayIp, defaultRoute, cidr, hostRouts, ipPool, dnses); } @Override @@ -326,6 +336,12 @@ public final class DefaultKubevirtNetwork implements KubevirtNetwork { return this; } + @Override + public KubevirtNetwork.Builder defaultRoute(boolean flag) { + this.defaultRoute = flag; + return this; + } + @Override public Builder cidr(String cidr) { this.cidr = cidr; diff --git a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtNetwork.java b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtNetwork.java index 94ed1de558..2db552eb4d 100644 --- a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtNetwork.java +++ b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtNetwork.java @@ -113,6 +113,13 @@ public interface KubevirtNetwork { */ Set hostRoutes(); + /** + * Returns default route flag. + * + * @return default route + */ + boolean defaultRoute(); + /** * Returns the IP pool. * @@ -219,6 +226,14 @@ public interface KubevirtNetwork { */ Builder gatewayIp(IpAddress ipAddress); + /** + * Returns network builder with supplied default route flag. + * + * @param flag default route + * @return network builder + */ + Builder defaultRoute(boolean flag); + /** * Returns network builder with supplied network CIDR. * diff --git a/apps/kubevirt-networking/api/src/test/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtNetworkTest.java b/apps/kubevirt-networking/api/src/test/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtNetworkTest.java index 8eefe364c4..ceec755436 100644 --- a/apps/kubevirt-networking/api/src/test/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtNetworkTest.java +++ b/apps/kubevirt-networking/api/src/test/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtNetworkTest.java @@ -43,6 +43,8 @@ public class DefaultKubevirtNetworkTest { private static final String SEGMENT_ID_2 = "2"; private static final IpAddress GATEWAY_IP_1 = IpAddress.valueOf("10.10.10.1"); private static final IpAddress GATEWAY_IP_2 = IpAddress.valueOf("20.20.20.1"); + private static final boolean DEFAULT_ROUTE_1 = true; + private static final boolean DEFAULT_ROUTE_2 = false; private static final String CIDR_1 = "10.10.10.0/24"; private static final String CIDR_2 = "20.20.20.0/24"; private static final IpAddress IP_POOL_START_1 = IpAddress.valueOf("10.10.10.100"); @@ -76,6 +78,7 @@ public class DefaultKubevirtNetworkTest { .mtu(MTU_1) .segmentId(SEGMENT_ID_1) .gatewayIp(GATEWAY_IP_1) + .defaultRoute(DEFAULT_ROUTE_1) .cidr(CIDR_1) .ipPool(new KubevirtIpPool(IP_POOL_START_1, IP_POOL_END_1)) .hostRoutes(ImmutableSet.of()) @@ -89,6 +92,7 @@ public class DefaultKubevirtNetworkTest { .mtu(MTU_1) .segmentId(SEGMENT_ID_1) .gatewayIp(GATEWAY_IP_1) + .defaultRoute(DEFAULT_ROUTE_1) .cidr(CIDR_1) .ipPool(new KubevirtIpPool(IP_POOL_START_1, IP_POOL_END_1)) .hostRoutes(ImmutableSet.of()) @@ -102,6 +106,7 @@ public class DefaultKubevirtNetworkTest { .mtu(MTU_2) .segmentId(SEGMENT_ID_2) .gatewayIp(GATEWAY_IP_2) + .defaultRoute(DEFAULT_ROUTE_2) .cidr(CIDR_2) .ipPool(new KubevirtIpPool(IP_POOL_START_2, IP_POOL_END_2)) .hostRoutes(ImmutableSet.of()) @@ -131,6 +136,7 @@ public class DefaultKubevirtNetworkTest { assertEquals(NAME_1, network.name()); assertEquals(MTU_1, network.mtu()); assertEquals(GATEWAY_IP_1, network.gatewayIp()); + assertEquals(DEFAULT_ROUTE_1, network.defaultRoute()); assertEquals(CIDR_1, network.cidr()); assertEquals(new KubevirtIpPool(IP_POOL_START_1, IP_POOL_END_1), network.ipPool()); assertEquals(ImmutableSet.of(DNS_1), network.dnses()); diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/cli/KubevirtListNetworkCommand.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/cli/KubevirtListNetworkCommand.java index dfaed157af..ded79aaa6e 100644 --- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/cli/KubevirtListNetworkCommand.java +++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/cli/KubevirtListNetworkCommand.java @@ -67,7 +67,7 @@ public class KubevirtListNetworkCommand extends AbstractShellCommand { 0, CLI_NAME_LENGTH - CLI_MARGIN_LENGTH), net.type().toString(), net.segmentId() == null ? "N/A" : net.segmentId(), - net.gatewayIp() == null ? "" : net.gatewayIp().toString()); + net.gatewayIp() == null ? "N/A" : net.gatewayIp().toString()); } } } diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/codec/KubevirtNetworkCodec.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/codec/KubevirtNetworkCodec.java index f04106e437..2d8a07ce1d 100644 --- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/codec/KubevirtNetworkCodec.java +++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/codec/KubevirtNetworkCodec.java @@ -48,6 +48,7 @@ public final class KubevirtNetworkCodec extends JsonCodec { private static final String MTU = "mtu"; private static final String SEGMENT_ID = "segmentId"; private static final String GATEWAY_IP = "gatewayIp"; + private static final String DEFAULT_ROUTE = "defaultRoute"; private static final String CIDR = "cidr"; private static final String HOST_ROUTES = "hostRoutes"; private static final String IP_POOL = "ipPool"; @@ -65,6 +66,7 @@ public final class KubevirtNetworkCodec extends JsonCodec { .put(NAME, network.name()) .put(MTU, network.mtu()) .put(GATEWAY_IP, network.gatewayIp().toString()) + .put(DEFAULT_ROUTE, network.defaultRoute()) .put(CIDR, network.cidr()); if (network.segmentId() != null) { @@ -113,6 +115,8 @@ public final class KubevirtNetworkCodec extends JsonCodec { MTU + MISSING_MESSAGE); String gatewayIp = nullIsIllegal(json.get(GATEWAY_IP).asText(), GATEWAY_IP + MISSING_MESSAGE); + boolean defaultRoute = nullIsIllegal(json.get(DEFAULT_ROUTE).asBoolean(), + DEFAULT_ROUTE + MISSING_MESSAGE); String cidr = nullIsIllegal(json.get(CIDR).asText(), CIDR + MISSING_MESSAGE); @@ -122,6 +126,7 @@ public final class KubevirtNetworkCodec extends JsonCodec { .name(name) .mtu(mtu) .gatewayIp(IpAddress.valueOf(gatewayIp)) + .defaultRoute(defaultRoute) .cidr(cidr); if (!type.equals(KubevirtNetwork.Type.FLAT.name())) { diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtDhcpHandler.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtDhcpHandler.java index 983a5bb999..1a2b7d7a55 100644 --- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtDhcpHandler.java +++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtDhcpHandler.java @@ -411,8 +411,8 @@ public class KubevirtDhcpHandler { } // Sets the default router address up. - // Performs only if the gateway is set in subnet. - if (network.gatewayIp() != null) { + // Performs only if the gateway is set and default route is configure to true. + if (network.gatewayIp() != null && network.defaultRoute()) { options.add(doRouterAddr(network)); } diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkHandler.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkHandler.java index d4a90a5f9e..992f2f424c 100644 --- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkHandler.java +++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkHandler.java @@ -649,7 +649,6 @@ public class KubevirtNetworkHandler { return; } - TrafficSelector.Builder sBuilder = DefaultTrafficSelector.builder() .matchEthType(Ethernet.TYPE_IPV4) .matchIPProtocol(IPv4.PROTOCOL_ICMP) diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/NetworkAttachmentDefinitionWatcher.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/NetworkAttachmentDefinitionWatcher.java index da66b0e712..7d40fee3ff 100644 --- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/NetworkAttachmentDefinitionWatcher.java +++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/NetworkAttachmentDefinitionWatcher.java @@ -74,6 +74,7 @@ public class NetworkAttachmentDefinitionWatcher { private static final String MTU = "mtu"; private static final String SEGMENT_ID = "segmentId"; private static final String GATEWAY_IP = "gatewayIp"; + private static final String DEFAULT_ROUTE = "defaultRoute"; private static final String CIDR = "cidr"; private static final String HOST_ROUTES = "hostRoutes"; private static final String DESTINATION = "destination"; @@ -284,6 +285,7 @@ public class NetworkAttachmentDefinitionWatcher { String type = configJson.getString(TYPE); Integer mtu = configJson.getInt(MTU); String gatewayIp = configJson.getString(GATEWAY_IP); + boolean defaultRoute = configJson.getBoolean(DEFAULT_ROUTE); if (!type.equalsIgnoreCase(FLAT.name())) { builder.segmentId(configJson.getString(SEGMENT_ID)); @@ -334,7 +336,8 @@ public class NetworkAttachmentDefinitionWatcher { } builder.networkId(name).name(name).type(Type.valueOf(type)) - .mtu(mtu).gatewayIp(IpAddress.valueOf(gatewayIp)).cidr(cidr); + .mtu(mtu).gatewayIp(IpAddress.valueOf(gatewayIp)) + .defaultRoute(defaultRoute).cidr(cidr); return builder.build(); } diff --git a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtNetworkCodecTest.java b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtNetworkCodecTest.java index 492847a363..667ca4be8f 100644 --- a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtNetworkCodecTest.java +++ b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtNetworkCodecTest.java @@ -96,6 +96,7 @@ public final class KubevirtNetworkCodecTest { .name("net-1") .type(KubevirtNetwork.Type.FLAT) .gatewayIp(IpAddress.valueOf("10.10.10.1")) + .defaultRoute(true) .mtu(1500) .cidr("10.10.10.0/24") .hostRoutes(ImmutableSet.of(hostRoute1, hostRoute2)) @@ -121,6 +122,7 @@ public final class KubevirtNetworkCodecTest { assertThat(network.type().name(), is("FLAT")); assertThat(network.cidr(), is("10.10.0.0/24")); assertThat(network.gatewayIp().toString(), is("10.10.0.1")); + assertThat(network.defaultRoute(), is(true)); assertThat(network.ipPool().start().toString(), is("10.10.10.100")); assertThat(network.ipPool().end().toString(), is("10.10.10.200")); assertThat(network.dnses().size(), is(1)); diff --git a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtNetworkJsonMatcher.java b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtNetworkJsonMatcher.java index 4a67e07e83..7cbc587cc6 100644 --- a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtNetworkJsonMatcher.java +++ b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtNetworkJsonMatcher.java @@ -35,6 +35,7 @@ public final class KubevirtNetworkJsonMatcher extends TypeSafeDiagnosingMatcher< private static final String MTU = "mtu"; private static final String SEGMENT_ID = "segmentId"; private static final String GATEWAY_IP = "gatewayIp"; + private static final String DEFAULT_ROUTE = "defaultRoute"; private static final String CIDR = "cidr"; private static final String HOST_ROUTES = "hostRoutes"; private static final String IP_POOL = "ipPool"; @@ -86,6 +87,14 @@ public final class KubevirtNetworkJsonMatcher extends TypeSafeDiagnosingMatcher< return false; } + // check default route + boolean jsonDefaultRoute = jsonNode.get(DEFAULT_ROUTE).asBoolean(); + boolean defaultRoute = network.defaultRoute(); + if (jsonDefaultRoute != defaultRoute) { + description.appendText("Default route was " + jsonDefaultRoute); + return false; + } + // check CIDR String jsonCidr = jsonNode.get(CIDR).asText(); String cidr = network.cidr(); diff --git a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkManagerTest.java b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkManagerTest.java index 1d0c676d6d..547443335a 100644 --- a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkManagerTest.java +++ b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkManagerTest.java @@ -61,6 +61,7 @@ public class KubevirtNetworkManagerTest { private static final Integer MTU = 1500; private static final String SEGMENT_ID = "1"; private static final IpAddress GATEWAY_IP = IpAddress.valueOf("10.10.10.1"); + private static final boolean DEFAULT_ROUTE = true; private static final String CIDR = "10.10.10.0/24"; private static final IpAddress IP_POOL_START = IpAddress.valueOf("10.10.10.100"); private static final IpAddress IP_POOL_END = IpAddress.valueOf("10.10.10.200"); @@ -72,6 +73,7 @@ public class KubevirtNetworkManagerTest { .mtu(MTU) .segmentId(SEGMENT_ID) .gatewayIp(GATEWAY_IP) + .defaultRoute(DEFAULT_ROUTE) .cidr(CIDR) .ipPool(new KubevirtIpPool(IP_POOL_START, IP_POOL_END)) .hostRoutes(ImmutableSet.of()) @@ -84,6 +86,7 @@ public class KubevirtNetworkManagerTest { .mtu(MTU) .segmentId(SEGMENT_ID) .gatewayIp(GATEWAY_IP) + .defaultRoute(DEFAULT_ROUTE) .cidr(CIDR) .ipPool(new KubevirtIpPool(IP_POOL_START, IP_POOL_END)) .hostRoutes(ImmutableSet.of()) diff --git a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/web/KubevirtNetworkWebResourceTest.java b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/web/KubevirtNetworkWebResourceTest.java index 8a06018646..b453dad3e1 100644 --- a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/web/KubevirtNetworkWebResourceTest.java +++ b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/web/KubevirtNetworkWebResourceTest.java @@ -88,6 +88,7 @@ public class KubevirtNetworkWebResourceTest extends ResourceTest { .cidr("10.10.10.0/24") .mtu(1500) .gatewayIp(IpAddress.valueOf("10.10.10.1")) + .defaultRoute(true) .ipPool(new KubevirtIpPool(IpAddress.valueOf("10.10.10.100"), IpAddress.valueOf("10.10.10.200"))) .build(); diff --git a/apps/kubevirt-networking/app/src/test/resources/org/onosproject/kubevirtnetworking/codec/KubevirtNetwork.json b/apps/kubevirt-networking/app/src/test/resources/org/onosproject/kubevirtnetworking/codec/KubevirtNetwork.json index afef160aa6..293cfcb68c 100644 --- a/apps/kubevirt-networking/app/src/test/resources/org/onosproject/kubevirtnetworking/codec/KubevirtNetwork.json +++ b/apps/kubevirt-networking/app/src/test/resources/org/onosproject/kubevirtnetworking/codec/KubevirtNetwork.json @@ -5,6 +5,7 @@ "mtu": 1500, "cidr": "10.10.0.0/24", "gatewayIp": "10.10.0.1", + "defaultRoute": true, "ipPool": { "start": "10.10.10.100", "end": "10.10.10.200" diff --git a/apps/kubevirt-networking/app/src/test/resources/org/onosproject/kubevirtnetworking/web/kubevirt-network.json b/apps/kubevirt-networking/app/src/test/resources/org/onosproject/kubevirtnetworking/web/kubevirt-network.json index d8a0a1ffb4..c65236c861 100644 --- a/apps/kubevirt-networking/app/src/test/resources/org/onosproject/kubevirtnetworking/web/kubevirt-network.json +++ b/apps/kubevirt-networking/app/src/test/resources/org/onosproject/kubevirtnetworking/web/kubevirt-network.json @@ -5,6 +5,7 @@ "mtu": 1500, "cidr": "10.10.10.0/24", "gatewayIp": "10.10.10.1", + "defaultRoute": true, "ipPool": { "start": "10.10.10.100", "end": "10.10.10.200"