blob: f9b19e2aa4590758804289c4310119037efaaf4d [file] [log] [blame]
Steve McIntyref1c04f92014-12-16 18:23:15 +00001import logging
2import os
Steve McIntyre53c7ad92014-12-16 19:21:13 +00003import time
Steve McIntyref1c04f92014-12-16 18:23:15 +00004from db.db import VlanDB
5from errors import CriticalError, InputError, ConfigError, SocketError
6
7class VlanUtil:
8 """VLANd utility functions"""
9
10 def get_switch_driver(self, switch, config):
11 logging.debug("Trying to find a driver for %s" % switch)
12 driver = config.switches[switch].driver
13 logging.debug("Driver: %s" % driver)
14 module = __import__("drivers.%s" % driver, fromlist=[driver])
15 class_ = getattr(module, driver)
16 return class_(switch)
17
Steve McIntyre091e2ac2014-12-16 19:20:07 +000018 # Simple helper wrapper for all the read-only database queries
19 def perform_db_query(self, db, command, data):
20 print 'perform_db_query'
Steve McIntyref1c04f92014-12-16 18:23:15 +000021 print command
22 print data
23 ret = {}
24 try:
Steve McIntyre091e2ac2014-12-16 19:20:07 +000025 if command == 'db.all_switches':
Steve McIntyref1c04f92014-12-16 18:23:15 +000026 ret = db.all_switches()
27 elif command == 'db.all_ports':
28 ret = db.all_ports()
29 elif command == 'db.all_vlans':
30 ret = db.all_vlans()
31 elif command == 'db.get_switch_by_id':
32 ret = db.get_switch_by_id(data['switch_id'])
33 elif command == 'db.get_switch_id_by_name':
34 ret = db.get_switch_id_by_name(data['name'])
35 elif command == 'db.get_switch_name_by_id':
36 ret = db.get_switch_name_by_id(data['switch_id'])
37 elif command == 'db.get_port_by_id':
38 ret = db.get_port_by_id(data['port_id'])
39 elif command == 'db.get_ports_by_switch':
40 ret = db.get_ports_by_switch(data['switch_id'])
41 elif command == 'db.get_port_by_switch_and_name':
42 ret = db.get_port_by_switch_and_name(data['switch_id'], data['name'])
43 elif command == 'db.get_current_vlan_id_by_port':
44 ret = db.get_current_vlan_id_by_port(data['port_id'])
45 elif command == 'db.get_base_vlan_id_by_port':
46 ret = db.get_base_vlan_id_by_port(data['port_id'])
47 elif command == 'db.get_ports_by_current_vlan':
48 ret = db.get_ports_by_current_vlan(data['vlan_id'])
49 elif command == 'db.get_ports_by_base_vlan':
50 ret = db.get_ports_by_base_vlan(data['vlan_id'])
51 elif command == 'db.get_vlan_by_id':
52 ret = db.get_vlan_by_id(data['vlan_id'])
53 elif command == 'db.get_vlan_id_by_name':
54 ret = db.get_vlan_id_by_name(data['name'])
55 elif command == 'db.get_vlan_id_by_tag':
56 ret = db.get_vlan_id_by_name(data['tag'])
57 elif command == 'db.get_vlan_name_by_id':
58 ret = db.get_vlan_name_by_id(data['vlan_id'])
59 else:
60 raise InputError("Unknown query command \"%s\"" % command)
61
62 except:
63 raise InputError("Invalid input in query")
64
65 return ret
66
Steve McIntyre53c7ad92014-12-16 19:21:13 +000067 # Simple helper wrapper for all the read-only daemon state queries
68 def perform_daemon_query(self, state, command, data):
69 print 'perform_daemon_query'
70 print command
71 print data
72 ret = {}
73 try:
74 if command == 'daemon.status':
75 # data ignored
76 ret['running'] = 'ok'
77 elif command == 'daemon.version':
78 # data ignored
79 ret['version'] = state.version
80 elif command == 'daemon.statistics':
81 ret['uptime'] = time.time() - state.starttime
82 else:
83 raise InputError("Unknown query command \"%s\"" % command)
84
85 except:
86 raise InputError("Invalid input in query")
87
88 return ret
89
90