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)
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)
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)
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))
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)
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)
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 = 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)
def _config_port_up(self, dev): cmd = ['ip', 'link', 'set', dev, 'up'] 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)
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 _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)