summaryrefslogtreecommitdiffstats
path: root/cyborg_enhancement/mitaka_version/cyborg/cyborg/accelerator/drivers/modules/netronome.py
blob: 6b15d34d1721a51e4e4c0a8fadf49c57d70740a8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
"""
Cyborg Netronome driver modules implementation.
"""
import os
import json
import socket



from cyborg.accelerator.drivers.modules import generic

from oslo_log import log as logging

LOG = logging.getLogger(__name__)

class NETRONOMEDRIVER(generic.GENERICDRIVER):
    def __init__(self, *args, **kwargs):
        super(NETRONOMEDRIVER, self).__init__(*args, **kwargs)

        self.port_name_prefix = 'sdn_v0.'
        self.port_index_max = 59

    def get_available_resource(self):
        port_resource = self._read_config()
        if port_resource:
            for port in port_resource:
                port["computer_node"] = socket.gethostname()
        LOG.info('Discover netronome port %s '% (port_resource))
        return port_resource

    def _ovs_port_check(self, port_name):
        for port in self.bridge_port_list:
            if port_name == port.strip():
                return True

        return False


    def _read_config(self):
        '''read tag_config_path tags config file 
        and return direction format variables'''
        self.tag_config_path = '/etc/cyborg/netronome_ports.json'
        if os.path.exists(self.tag_config_path):
            config_file = open(self.tag_config_path, 'r')
        else:
            output = 'There is no %s' % (self.tag_config_path)
            LOG.error('There is no %s' % (self.tag_config_path))
            return

        try:
            buf = config_file.read()
            netronome = json.loads(buf)
        except Exception:
            LOG.error('Failed to read %s' % (self.tag_config_path))

        return netronome['netronome_ports']

    def discover_ports(self):
        port_list = []
        for i in range(0, port_index_max + 1):
            port_name = port_name_prefix + str(i)
            port = dict()
            port["bind_instance"] = None
            port["bind_port"] = None
            port["is_used"] = False
            port["pci_slot"] = os.popen("ethtool -i %s | grep bus-info | cut -d ' ' -f 5" % port_name).read().strip()
            port["port_id"] = i
            port["port_name"] = port_name
            port["product_id"] = "6003"
            port["vender_id"] = "19ee"

            port_list.append(port)