From 209c3ba9e0112a2351df9230cdf3a6e35e85f776 Mon Sep 17 00:00:00 2001
From: Gary Kotton <gkotton@vmware.com>
Date: Fri, 2 Feb 2018 13:04:51 +0200
Subject: [PATCH] NSX|V3: allow a router to be attached to a VLAN network

Change-Id: Ic7a258ae2a8cab8acf81eef3663cb2864da01793
Depends-On: I34ae08841158635e10ec4bd4518db4712ba4e984
---
 vmware_nsx/plugins/nsx_v3/plugin.py | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/vmware_nsx/plugins/nsx_v3/plugin.py b/vmware_nsx/plugins/nsx_v3/plugin.py
index ae4316a6db..3f054fa301 100644
--- a/vmware_nsx/plugins/nsx_v3/plugin.py
+++ b/vmware_nsx/plugins/nsx_v3/plugin.py
@@ -3788,6 +3788,15 @@ class NsxV3Plugin(agentschedulers_db.AZDhcpAgentSchedulerDbMixin,
                 net_az = self.get_network_az_by_net_id(context, network_id)
                 relay_service = net_az.dhcp_relay_service
 
+            resource_type = None
+            if not self._is_overlay_network(context, network_id):
+                # The router can only be configured to be centralized if
+                # GW network is attached
+                if not gw_network_id:
+                    msg = _("A router attached to a VLAN backed network "
+                            "must have a external network assigned.")
+                    raise n_exc.InvalidInput(error_message=msg)
+                resource_type = nsxlib_consts.LROUTERPORT_CENTRALIZED
             self.nsxlib.router.create_logical_router_intf_port_by_ls_id(
                 logical_router_id=nsx_router_id,
                 display_name=display_name,
@@ -3795,7 +3804,8 @@ class NsxV3Plugin(agentschedulers_db.AZDhcpAgentSchedulerDbMixin,
                 ls_id=nsx_net_id,
                 logical_switch_port_id=nsx_port_id,
                 address_groups=address_groups,
-                relay_service_uuid=relay_service)
+                relay_service_uuid=relay_service,
+                resource_type=resource_type)
 
             if router_db.gw_port and not router_db.enable_snat:
                 # TODO(berlin): Announce the subnet on tier0 if enable_snat