Пример #1
0
    def _config_vf_mac_address(self, fabric, dev, vf_index, vnic_mac):
        vguid = self._get_guid_from_mac(vnic_mac)
        fabric_details = self.rm.get_fabric_details(fabric)
        pf = fabric_details['pf']
        fabric_type = fabric_details['fabric_type']
        if fabric_type == 'ib':
            hca_port = fabric_details['hca_port']
            pf_mlx_dev = fabric_details['pf_mlx_dev']
            self._config_vf_pkey(INVALID_PKEY, DEFAULT_PKEY_IDX, pf_mlx_dev,
                                 dev, hca_port)

            guid_idx = self._get_guid_idx(pf_mlx_dev, dev, hca_port)
            path = "/sys/class/infiniband/%s/iov/ports/%s/admin_guids/%s" % (
                pf_mlx_dev, hca_port, guid_idx)
            cmd = ['ebrctl', 'write-sys', path, vguid]
            execute(cmd, root_helper=None)
            ppkey_idx = self._get_pkey_idx(int(DEFAULT_PKEY, 16), pf_mlx_dev,
                                           hca_port)
            if ppkey_idx >= 0:
                self._config_vf_pkey(ppkey_idx, PARTIAL_PKEY_IDX, pf_mlx_dev,
                                     dev, hca_port)
            else:
                LOG.error("Can't find partial management pkey for %s:%s" %
                          (pf_mlx_dev, vf_index))

        else:
            cmd = ['ip', 'link', 'set', pf, 'vf', vf_index, 'mac', vnic_mac]
            execute(cmd, root_helper=None)
 def _config_vlan_priority_hostdev(self, fabric, pf, vf_index, dev, vlan, priority='0'):
     fabric_details = self.rm.get_fabric_details(fabric)
     fabric_type = fabric_details['fabric_type']
     if fabric_type == 'ib':
         self._config_vlan_ib(vlan, fabric_details, dev, vf_index)
     else:
         cmd = ['ip', 'link', 'set', pf, 'vf', vf_index, 'vlan', vlan, 'qos', priority]
         execute(cmd, root_helper=None)
Пример #3
0
    def _config_vf_mac_address_cx4(self, vguid, dev, fabric_details):
        vf_num = fabric_details["vfs"][dev]["vf_num"]
        pf_mlx_dev = fabric_details["pf_mlx_dev"]
        guid_node = constants.CX4_GUID_NODE_PATH % {"module": pf_mlx_dev, "vf_num": vf_num}
        guid_port = constants.CX4_GUID_PORT_PATH % {"module": pf_mlx_dev, "vf_num": vf_num}
        guid_poliy = constants.CX4_GUID_POLICY_PATH % {"module": pf_mlx_dev, "vf_num": vf_num}
        for path in (guid_node, guid_port):
            cmd = ["ebrctl", "write-sys", path, vguid]
            execute(cmd, root_helper=None)

        cmd = ["ebrctl", "write-sys", guid_poliy, "Up\n"]
        execute(cmd, root_helper=None)
Пример #4
0
 def _config_vlan_priority_direct(self,
                                  pf,
                                  vf_index,
                                  dev,
                                  vlan,
                                  priority='0'):
     self._config_port_down(dev)
     cmd = [
         'ip', 'link', 'set', pf, 'vf', vf_index, 'vlan', vlan, 'qos',
         priority
     ]
     execute(cmd, root_helper=None)
     self._config_port_up(dev)
Пример #5
0
    def _config_vf_mac_address_cx3(self, vguid, dev, fabric_details):
        hca_port = fabric_details["hca_port"]
        pf_mlx_dev = fabric_details["pf_mlx_dev"]
        self._config_vf_pkey(INVALID_PKEY, DEFAULT_PKEY_IDX, pf_mlx_dev, dev, hca_port)

        guid_idx = self._get_guid_idx(pf_mlx_dev, dev, hca_port)
        path = constants.ADMIN_GUID_PATH % (pf_mlx_dev, hca_port, guid_idx)
        cmd = ["ebrctl", "write-sys", path, vguid]
        execute(cmd, root_helper=None)
        ppkey_idx = self._get_pkey_idx(int(DEFAULT_PKEY, 16), pf_mlx_dev, hca_port)
        if ppkey_idx >= 0:
            self._config_vf_pkey(ppkey_idx, PARTIAL_PKEY_IDX, pf_mlx_dev, dev, hca_port)
        else:
            LOG.error("Can't find partial management pkey" "for %s:%s" % (pf_mlx_dev, dev))
Пример #6
0
 def _config_vlan_priority_hostdev(self,
                                   fabric,
                                   pf,
                                   vf_index,
                                   dev,
                                   vlan,
                                   priority='0'):
     fabric_details = self.rm.get_fabric_details(fabric)
     fabric_type = fabric_details['fabric_type']
     if fabric_type == 'ib':
         self._config_vlan_ib(vlan, fabric_details, dev, vf_index)
     else:
         cmd = [
             'ip', 'link', 'set', pf, 'vf', vf_index, 'vlan', vlan, 'qos',
             priority
         ]
         execute(cmd, root_helper=None)
Пример #7
0
    def _config_vf_mac_address(self, fabric, dev, vf_index, vnic_mac):
        vguid = self._get_guid_from_mac(vnic_mac)
        fabric_details = self.rm.get_fabric_details(fabric)
        pf = fabric_details['pf']
        fabric_type = fabric_details['fabric_type']
        if fabric_type == 'ib':
            hca_port = fabric_details['hca_port']
            pf_mlx_dev = fabric_details['pf_mlx_dev']

            self._config_vf_pkey(INVALID_PKEY, DEFAULT_PKEY_IDX, pf_mlx_dev, dev, hca_port)
            path = "/sys/class/infiniband/%s/iov/ports/%s/admin_guids/%s" % (pf_mlx_dev, hca_port, int(vf_index) + 1)
            cmd = ['ebrctl', 'write-sys', path, vguid]
            execute(cmd, root_helper=None)
            ppkey_idx = self._get_pkey_idx(PARTIAL_VLAN, pf_mlx_dev, hca_port)
            if ppkey_idx >= 0:
                self._config_vf_pkey(ppkey_idx, PARTIAL_PKEY_IDX, pf_mlx_dev, dev, hca_port)
            else:
                LOG.error("Can't find partial management pkey for %s:%s" % (pf_mlx_dev, vf_index))

        else:
            cmd = ['ip', 'link', 'set', pf, 'vf', vf_index, 'mac', vnic_mac]
            execute(cmd, root_helper=None)
 def _config_vlan_priority_direct(self, pf, vf_index, dev, vlan, priority='0'):
     self._config_port_down(dev)
     cmd = ['ip', 'link', 'set', pf, 'vf', vf_index, 'vlan', vlan, 'qos', priority]
     execute(cmd, root_helper=None)
     self._config_port_up(dev)
Пример #9
0
 def _config_port_up(self, dev):
     cmd = ["ip", "link", "set", dev, "up"]
     execute(cmd, root_helper=None)
Пример #10
0
 def _config_vf_pkey(self, ppkey_idx, pkey_idx, pf_mlx_dev, vf_pci_id, hca_port):
     path = constants.PKEY_INDEX_PATH % (pf_mlx_dev, vf_pci_id, hca_port, pkey_idx)
     cmd = ["ebrctl", "write-sys", path, ppkey_idx]
     execute(cmd, root_helper=None)
 def _config_port_down(self, dev, vnic_type=constants.VIF_TYPE_DIRECT):
     if vnic_type == constants.VIF_TYPE_DIRECT:
         cmd = ['ip', 'link', 'set', dev, 'down']
         execute(cmd, root_helper=None)
Пример #12
0
 def _config_port_up(self, dev):
     cmd = ['ip', 'link', 'set', dev, 'up']
     execute(cmd, root_helper=None)
Пример #13
0
 def _set_devname(self, device_name, dev):
     self._config_port_down(dev)
     cmd = ['ip', 'link', 'set', dev, 'name', device_name]
     execute(cmd, root_helper=None)
Пример #14
0
 def _config_port_down(self, dev, vnic_type=constants.VIF_TYPE_DIRECT):
     if vnic_type == constants.VIF_TYPE_DIRECT:
         cmd = ['ip', 'link', 'set', dev, 'down']
         execute(cmd, root_helper=None)
 def _config_port_up(self, dev):
     cmd = ['ip', 'link', 'set', dev, 'up']
     execute(cmd, root_helper=None)
 def _config_vf_pkey(self, ppkey_idx, pkey_idx, pf_mlx_dev, vf_pci_id, hca_port):
     path = "/sys/class/infiniband/%s/iov/%s/ports/%s/pkey_idx/%s" % (pf_mlx_dev, vf_pci_id, hca_port, pkey_idx)
     cmd = ['ebrctl', 'write-sys', path, ppkey_idx]
     execute(cmd, root_helper=None)
 def _set_devname(self, device_name, dev):
     self._config_port_down(dev)
     cmd = ['ip', 'link', 'set', dev, 'name', device_name]
     execute(cmd, root_helper=None)
Пример #18
0
 def _config_vf_pkey(self, ppkey_idx, pkey_idx, pf_mlx_dev, vf_pci_id,
                     hca_port):
     path = "/sys/class/infiniband/%s/iov/%s/ports/%s/pkey_idx/%s" % (
         pf_mlx_dev, vf_pci_id, hca_port, pkey_idx)
     cmd = ['ebrctl', 'write-sys', path, ppkey_idx]
     execute(cmd, root_helper=None)