# contact with: nfvlabs@tid.es
##
-'''
+"""
This is the thread for the http server North API.
Two thread will be launched, with normal and administrative permissions.
-'''
-
-__author__ = "Alfonso Tierno, Leonardo Mirabal"
-__date__ = "$06-Feb-2017 12:07:15$"
-__version__ = "0.5.10-r526"
-version_date = "Apr 2017"
-database_version = "0.17" #expected database schema version
+"""
import threading
import vim_db
import logging
# import imp
+import os.path
import argparse
from netaddr import IPNetwork
from jsonschema import validate as js_v, exceptions as js_e
import openflow_thread as oft
import openflow_conn
+__author__ = "Alfonso Tierno, Leonardo Mirabal"
+__date__ = "$06-Feb-2017 12:07:15$"
+__version__ = "0.5.13-r529"
+version_date = "May 2017"
+database_version = 18 #needed database schema version
HTTP_Bad_Request = 400
HTTP_Unauthorized = 401
# if self.running_info:
# return #TODO service can be checked and rebuild broken threads
r = self.db.get_db_version()
+ db_path = __file__
+ db_path = db_path[:db_path.rfind("/")]
+ if os.path.exists(db_path + "/database_utils/migrate_vim_db.sh"):
+ db_path += "/database_utils"
+ else:
+ db_path += "/../database_utils"
+
if r[0] < 0:
- raise ovimException("DATABASE is not a VIM one or it is a '0.0' version. Try to upgrade to version '{}' with "\
- "'./database_utils/migrate_vim_db.sh'".format(database_version) )
- elif r[1] != database_version:
- raise ovimException("DATABASE wrong version '{}'. Try to upgrade/downgrade to version '{}' with "\
- "'./database_utils/migrate_vim_db.sh'".format(r[1], database_version) )
+ raise ovimException("DATABASE is not valid. If you think it is corrupted, you can init it with"
+ " '{db_path}/init_vim_db.sh' script".format(db_path=db_path))
+ elif r[0] != database_version:
+ raise ovimException("DATABASE wrong version '{current}'. Try to upgrade/downgrade to version '{target}'"
+ " with '{db_path}/migrate_vim_db.sh {target}'".format(
+ current=r[0], target=database_version, db_path=db_path))
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
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
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)