Fix container port ipaddress setting in ipvlan/macvlan drivers

Currently ipaddress is being set from nova instance port and thus
making vm ip and container ip same. Fix this by using container port
dict for getting container IP.

Another change is renaming 'nested_port', which is actually Nova
instance port, to 'vm_port', for the sake of avoiding ambiguity.

Change-Id: I9ea93c88c2889c5a6b7eff230ffdfb87b96b0e25
Closes-bug: #1641537
This commit is contained in:
vikaschoudhary16 2016-11-14 08:17:52 +00:00 committed by vikas choudhary
parent bd7bbfd470
commit 1939273877
4 changed files with 27 additions and 25 deletions

View File

@ -13,19 +13,20 @@ from oslo_config import cfg
from oslo_utils import importutils
def port_bind(endpoint_id, port, subnets, network=None, nested_port=None):
def port_bind(endpoint_id, port, subnets, network=None, vm_port=None):
"""Binds the Neutron port to the network interface on the host.
:param endpoint_id: the ID of the endpoint as string
:param port: the instance Neutron port dictionary as returned by
:param port: the container Neutron port dictionary as returned by
python-neutronclient
:param subnets: an iterable of all the Neutron subnets which the
endpoint is trying to join
:param network: the Neutron network which the endpoint is trying to
join
:param nested_port: the dictionary, as returned by python-neutronclient,
of the port that that is used when running inside
another instance (either ipvlan/macvlan or a subport)
:param vm_port: the Nova instance port dictionary, as returned by
python-neutronclient. Binding is being done for the
port of a container which is running inside this Nova
instance (either ipvlan/macvlan or a subport).
:returns: the tuple of the names of the veth pair and the tuple of stdout
and stderr returned by processutils.execute invoked with the
executable script for binding
@ -35,7 +36,7 @@ def port_bind(endpoint_id, port, subnets, network=None, nested_port=None):
driver = importutils.import_module(cfg.CONF.binding.driver)
return driver.port_bind(endpoint_id, port, subnets, network=network,
nested_port=nested_port)
vm_port=vm_port)
def port_unbind(endpoint_id, neutron_port):

View File

@ -20,19 +20,19 @@ KIND = 'ipvlan'
IPVLAN_MODE_L2 = ifinfmsg.ifinfo.ipvlan_data.modes['IPVLAN_MODE_L2']
def port_bind(endpoint_id, port, subnets, network=None, nested_port=None):
def port_bind(endpoint_id, port, subnets, network=None, vm_port=None):
"""Binds the Neutron port to the network interface on the host.
:param endpoint_id: the ID of the endpoint as string
:param port: the instance Neutron port dictionary as returned by
:param port: the container Neutron port dictionary as returned by
python-neutronclient
:param subnets: an iterable of all the Neutron subnets which the
endpoint is trying to join
:param network: the Neutron network which the endpoint is trying to
join
:param nested_port: the dictionary, as returned by python-neutronclient,
of the port that that is used when running inside
another instance (either ipvlan/macvlan or a subport)
:param vm_port: the Nova instance port dictionary, as returned by
python-neutronclient. Container is running inside
this instance (either ipvlan/macvlan or a subport)
:returns: the tuple of the names of the veth pair and the tuple of stdout
and stderr returned by processutils.execute invoked with the
executable script for binding
@ -42,14 +42,14 @@ def port_bind(endpoint_id, port, subnets, network=None, nested_port=None):
ip = utils.get_ipdb()
port_id = port['id']
_, devname = utils.get_veth_pair_names(port_id)
link_iface = nested.get_link_iface(port)
link_iface = nested.get_link_iface(vm_port)
with ip.create(ifname=devname, kind=KIND,
link=ip.interfaces[link_iface],
mode=IPVLAN_MODE_L2) as container_iface:
utils._configure_container_iface(
container_iface, subnets,
fixed_ips=nested_port.get(utils.FIXED_IP_KEY))
fixed_ips=port.get(utils.FIXED_IP_KEY))
return None, devname, ('', None)

View File

@ -19,19 +19,19 @@ KIND = 'macvlan'
MACVLAN_MODE_BRIDGE = 'bridge'
def port_bind(endpoint_id, port, subnets, network=None, nested_port=None):
def port_bind(endpoint_id, port, subnets, network=None, vm_port=None):
"""Binds the Neutron port to the network interface on the host.
:param endpoint_id: the ID of the endpoint as string
:param port: the instance Neutron port dictionary as returned by
:param port: the container Neutron port dictionary as returned by
python-neutronclient
:param subnets: an iterable of all the Neutron subnets which the
endpoint is trying to join
:param network: the Neutron network which the endpoint is trying to
join
:param nested_port: the dictionary, as returned by python-neutronclient,
of the port that that is used when running inside
another instance
:param vm_port: the Nova instance port dictionary, as returned by
python-neutronclient. Container is running inside
instance.
:returns: the tuple of the names of the veth pair and the tuple of stdout
and stderr returned by processutils.execute invoked with the
executable script for binding
@ -41,14 +41,14 @@ def port_bind(endpoint_id, port, subnets, network=None, nested_port=None):
ip = utils.get_ipdb()
port_id = port['id']
_, devname = utils.get_veth_pair_names(port_id)
link_iface = nested.get_link_iface(port)
link_iface = nested.get_link_iface(vm_port)
with ip.create(ifname=devname, kind=KIND,
link=ip.interfaces[link_iface],
macvlan_mode=MACVLAN_MODE_BRIDGE) as container_iface:
utils._configure_container_iface(
container_iface, subnets,
fixed_ips=nested_port.get(utils.FIXED_IP_KEY))
fixed_ips=port.get(utils.FIXED_IP_KEY))
return None, devname, ('', None)

View File

@ -32,19 +32,20 @@ VIF_DETAILS_KEY = 'binding:vif_details'
VIF_TYPE_KEY = 'binding:vif_type'
def port_bind(endpoint_id, port, subnets, network=None, nested_port=None):
def port_bind(endpoint_id, port, subnets, network=None, vm_port=None):
"""Binds the Neutron port to the network interface on the host.
:param endpoint_id: the ID of the endpoint as string
:param port: the instance Neutron port dictionary as returned by
:param port: the container Neutron port dictionary as returned by
python-neutronclient
:param subnets: an iterable of all the Neutron subnets which the
endpoint is trying to join
:param network: the Neutron network which the endpoint is trying to
join
:param nested_port: the dictionary, as returned by python-neutronclient,
of the port that that is used when running inside
another instance (either ipvlan/macvlan or a subport)
:param vm_port: the Nova instance dictionary, as returned by
python-neutronclient. Container port under binding is
running inside this instance (either ipvlan/macvlan or
a subport)
:returns: the tuple of the names of the veth pair and the tuple of stdout
and stderr returned by processutils.execute invoked with the
executable script for binding