__author__ = "Alfonso Tierno, Leonardo Mirabal"
__date__ = "$06-Feb-2017 12:07:15$"
-__version__ = "0.5.12-r528"
+__version__ = "0.5.14-r530"
version_date = "May 2017"
-database_version = 17 #needed database schema version
+database_version = 18 #needed database schema version
HTTP_Bad_Request = 400
HTTP_Unauthorized = 401
self.logger = logging.getLogger(self.logger_name)
self.db = None
self.db = self._create_database_connection()
- self.db_lock = None
- self.db_of = None
self.of_test_mode = False
def _create_database_connection(self):
ips = IPNetwork(cidr)
if "dhcp_first_ip" not in network:
- network["dhcp_first_ip"] = str(ips[2])
+ network["dhcp_first_ip"] = str(ips[3])
if "dhcp_last_ip" not in network:
network["dhcp_last_ip"] = str(ips[-2])
if "gateway_ip" not in network:
- network["gateway_ip"] = str(ips[1])
+ network["gateway_ip"] = str(ips[2])
return True
else:
self.logger.critical("Starting ovim server version: '{} {}' database version '{}'".format(
self.get_version(), self.get_version_date(), self.get_database_version()))
# create database connection for openflow threads
- self.db_of = self._create_database_connection()
- self.config["db"] = self.db_of
- self.db_lock = threading.Lock()
- self.config["db_lock"] = self.db_lock
+ self.config["db"] = self._create_database_connection()
+ self.config["db_lock"] = threading.Lock()
self.of_test_mode = False if self.config['mode'] == 'normal' or self.config['mode'] == "OF only" else True
# precreate interfaces; [bridge:<host_bridge_name>, VLAN used at Host, uuid of network camping in this bridge,
dhcp_params = self.config.get("dhcp_server")
if dhcp_params:
thread = dt.dhcp_thread(dhcp_params=dhcp_params, test=host_test_mode, dhcp_nets=self.config["dhcp_nets"],
- db=self.db_of, db_lock=self.db_lock, logger_name=self.logger_name + ".dhcp",
+ db=self.config["db"], db_lock=self.config["db_lock"],
+ logger_name=self.logger_name + ".dhcp",
debug=self.config.get('log_level_of'))
thread.start()
self.config['dhcp_thread'] = thread
self.config['host_threads'] = {}
for host in hosts:
host['image_path'] = '/opt/VNF/images/openvim'
- thread = ht.host_thread(name=host['name'], user=host['user'], host=host['ip_name'], db=self.db_of,
- db_lock=self.db_lock, test=host_test_mode, image_path=self.config['image_path'],
- version=self.config['version'], host_id=host['uuid'], develop_mode=host_develop_mode,
+ thread = ht.host_thread(name=host['name'], user=host['user'], host=host['ip_name'], db=self.config["db"],
+ db_lock=self.config["db_lock"], test=host_test_mode,
+ image_path=self.config['image_path'],
+ version=self.config['version'], host_id=host['uuid'],
+ develop_mode=host_develop_mode,
develop_bridge_iface=host_develop_bridge_iface,
logger_name=self.logger_name + ".host." + host['name'],
debug=self.config.get('log_level_host'))
module = temp_dict['of_controller']
if module not in ovim.of_module:
- for base in ("", "osm_openvim.", "lib_osm_openvim."):
- try:
- pkg = __import__(base + module)
- if base:
- of_conn_module = getattr(pkg, module)
- else:
- of_conn_module = pkg
- ovim.of_module[module] = of_conn_module
- self.logger.debug("Module load from {}".format(base + module))
- break
- except Exception as e:
- self.logger.warning("Module {} not found {}".format(base + module, e))
- else:
+ try:
+ pkg = __import__("osm_openvim." + module)
+ of_conn_module = getattr(pkg, module)
+ ovim.of_module[module] = of_conn_module
+ self.logger.debug("Module load from {}".format("osm_openvim." + module))
+ except Exception as e:
self.logger.error("Cannot open openflow controller module of type '%s'", module)
raise ovimException("Cannot open openflow controller of type module '{}'"
"Revise it is installed".format(module),
# ofc_net_same_vlan = False
ofc_net_same_vlan = False
- thread = oft.openflow_thread(ofc_uuid, of_conn, of_test=self.of_test_mode, db=self.db_of, db_lock=self.db_lock,
- pmp_with_same_vlan=ofc_net_same_vlan, debug=self.config['log_level_of'])
+ thread = oft.openflow_thread(ofc_uuid, of_conn, of_test=self.of_test_mode, db=self.config["db"],
+ db_lock=self.config["db_lock"],
+ pmp_with_same_vlan=ofc_net_same_vlan,
+ logger_name=self.logger_name + ".ofc." + ofc_uuid,
+ debug=self.config.get('log_level_of'))
#r, c = thread.OF_connector.obtain_port_correspondence()
#if r < 0:
# raise ovimException("Cannot get openflow information %s", c)
net_vlan = network.get("vlan")
net_bind_net = network.get("bind_net")
net_bind_type = network.get("bind_type")
+ net_region = network.get("region")
name = network["name"]
# check if network name ends with :<vlan_tag> and network exist in order to make and automated bindning
bridge_net_name = net_provider[7:]
for brnet in self.config['bridge_nets']:
if brnet[0] == bridge_net_name: # free
- if not brnet[3]:
+ if brnet[3]:
raise ovimException("invalid 'provider:physical', "
"bridge '%s' is already used" % bridge_net_name, HTTP_Conflict)
bridge_net = brnet
net_vlan = bridge_net[1]
elif net_type == 'bridge_data' or net_type == 'bridge_man' and self.config['network_type'] == 'ovs':
net_provider = 'OVS'
+ if not net_region:
+ if net_type == "data" or net_type == "ptp":
+ net_region = "__DATA__"
+ elif net_provider == "OVS":
+ net_region = "__OVS__"
if not net_vlan and (net_type == "data" or net_type == "ptp" or net_provider == "OVS"):
- net_vlan = self.db.get_free_net_vlan()
+ net_vlan = self.db.get_free_net_vlan(net_region)
if net_vlan < 0:
raise ovimException("Error getting an available vlan", HTTP_Internal_Server_Error)
if net_provider == 'OVS':
network['provider'] = net_provider
network['type'] = net_type
network['vlan'] = net_vlan
+ network['region'] = net_region
dhcp_integrity = True
if 'enable_dhcp' in network and network['enable_dhcp']:
dhcp_integrity = self._check_dhcp_data_integrity(network)
if network["name"] in self.config["dhcp_server"].get("nets", ()):
self.config["dhcp_nets"].append(content)
self.logger.debug("dhcp_server: add new net", content)
- elif not bridge_net and bridge_net[0] in self.config["dhcp_server"].get("bridge_ifaces", ()):
+ elif bridge_net and bridge_net[0] in self.config["dhcp_server"].get("bridge_ifaces", ()):
self.config["dhcp_nets"].append(content)
self.logger.debug("dhcp_server: add new net", content, content)
return content
self.config["dhcp_nets"].remove(network_id)
return content
else:
- raise ovimException("Error deleting network %s" % network_id, HTTP_Internal_Server_Error)
+ raise ovimException("Error deleting network '{}': {}".format(network_id, content), -result)
def get_openflow_rules(self, network_id=None):
"""
else:
raise ovimException("Default Openflow controller not not running", HTTP_Not_Found)
- if ofc_id in self.config['ofcs_thread']:
+ elif ofc_id in self.config['ofcs_thread']:
conn = self.config['ofcs_thread'][ofc_id].OF_connector
else:
raise ovimException("Openflow controller not found with ofc_id={}".format(ofc_id), HTTP_Not_Found)
host_develop_mode = True if self.config['mode'] == 'development' else False
dhcp_host = ht.host_thread(name='openvim_controller', user=ovs_controller_user, host=controller_ip,
- db=self.db_of,
- db_lock=self.db_lock, test=host_test_mode,
+ db=self.config["db"], db_lock=self.config["db_lock"], test=host_test_mode,
image_path=self.config['image_path'], version=self.config['version'],
host_id='openvim_controller', develop_mode=host_develop_mode,
- develop_bridge_iface=bridge_ifaces, logger_name=self.logger_name + ".host.controller",
+ develop_bridge_iface=bridge_ifaces,
+ logger_name=self.logger_name + ".host.controller",
debug=self.config.get('log_level_host'))
-
+ dhcp_host.start()
self.config['host_threads']['openvim_controller'] = dhcp_host
if not host_test_mode:
dhcp_host.ssh_connect()
controller_host = self.get_dhcp_controller()
controller_host.create_linux_bridge(vlan)
- controller_host.create_dhcp_interfaces(vlan, first_ip, dhcp_netmask)
+ controller_host.create_dhcp_interfaces(vlan, gateway, dhcp_netmask)
controller_host.launch_dhcp_server(vlan, ip_range, dhcp_netmask, dhcp_path, gateway)
if __name__ == "__main__":