Bug 2128545 - os-net-config should configure ethtool_opts for SRIOV-VF
Summary: os-net-config should configure ethtool_opts for SRIOV-VF
Keywords:
Status: POST
Alias: None
Product: Red Hat OpenStack
Classification: Red Hat
Component: os-net-config
Version: 16.1 (Train)
Hardware: x86_64
OS: Linux
medium
medium
Target Milestone: zstream
: 16.2 (Train on RHEL 8.4)
Assignee: Karthik Sundaravel
QA Contact: Nobody
URL:
Whiteboard:
Depends On:
Blocks: 2222869
TreeView+ depends on / blocked
 
Reported: 2022-09-21 00:37 UTC by Keigo Noha
Modified: 2023-08-16 05:51 UTC (History)
7 users (show)

Fixed In Version:
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
Environment:
Last Closed:
Target Upstream Version:
Embargoed:


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
Launchpad 1990328 0 None None None 2022-09-21 02:38:53 UTC
OpenStack gerrit 867319 0 None MERGED Add ethtool_opts config for sriov VF 2023-07-14 12:22:16 UTC
OpenStack gerrit 886133 0 None MERGED Add ethtool_opts config for sriov VF 2023-08-16 05:36:47 UTC
Red Hat Issue Tracker NFV-2644 0 None None None 2022-09-21 01:25:07 UTC
Red Hat Issue Tracker OSP-18835 0 None None None 2022-09-21 00:48:10 UTC

Description Keigo Noha 2022-09-21 00:37:12 UTC
Description of problem:
os-net-config should configure ethtool_opts for SRIOV-VF.

The current os-net-config in OSP16.x and upstream don't have the implementation of ethtool_opts for SRIOV VF.

In the discussion with SBR-Networking, the VF's option configured by ethtool should work separately from SRIOV PF.

Due to that, os-net-config should accept ethtool_opts for SRIOV VF.

~~~
   1362 class SriovVF(_BaseOpts):
   1363     """Base class for SR-IOV VF."""
   1364 
   1365     def __init__(self, device, vfid, use_dhcp=False, use_dhcpv6=False,
   1366                  addresses=None, routes=None, rules=None, mtu=None,
   1367                  primary=False, nic_mapping=None, persist_mapping=False,
   1368                  defroute=True, dhclient_args=None, dns_servers=None,
   1369                  nm_controlled=False, onboot=True, domain=None, vlan_id=0,
   1370                  qos=0, spoofcheck=None, trust=None, state=None, macaddr=None,
   1371                  promisc=None, min_tx_rate=0, max_tx_rate=0):
   1372         addresses = addresses or []
   1373         routes = routes or []
   1374         rules = rules or []
   1375         dns_servers = dns_servers or []
   1376         mapped_nic_names = mapped_nics(nic_mapping)
   1377         if device in mapped_nic_names:
   1378             device = mapped_nic_names[device]
   1379         # Empty strings are set for the name field.
   1380         # The provider shall identify the VF name from the PF device name
   1381         # (device) and the VF id.
   1382         name = utils.get_vf_devname(device, vfid)
   1383         super(SriovVF, self).__init__(name, use_dhcp, use_dhcpv6, addresses,
   1384                                       routes, rules, mtu, primary, nic_mapping,
   1385                                       persist_mapping, defroute,
   1386                                       dhclient_args, dns_servers,
   1387                                       nm_controlled, onboot, domain)
   1388         self.vfid = int(vfid)
   1389         self.device = device
   1390         self.vlan_id = int(vlan_id)
   1391         self.qos = int(qos)
   1392         self.min_tx_rate = int(min_tx_rate)
   1393         self.max_tx_rate = int(max_tx_rate)
   1394         self.spoofcheck = spoofcheck
   1395         self.trust = trust
   1396         self.state = state
   1397         pci_address = utils.get_pci_address(name, False)
   1398         if pci_address is None:
   1399             pci_address = utils.get_stored_pci_address(name, False)
   1400         self.macaddr = macaddr
   1401         self.promisc = promisc
   1402         self.pci_address = pci_address
   1403         utils.update_sriov_vf_map(device, self.vfid, name,
   1404                                   vlan_id=self.vlan_id,
   1405                                   qos=self.qos,
   1406                                   spoofcheck=spoofcheck,
   1407                                   trust=trust,
   1408                                   state=state,
   1409                                   macaddr=macaddr,
   1410                                   promisc=promisc,
   1411                                   pci_address=pci_address,
   1412                                   min_tx_rate=min_tx_rate,
   1413                                   max_tx_rate=max_tx_rate)
   1414 
~~~
~~~
   1457 class SriovPF(_BaseOpts):
   1458     """Base class for SR-IOV PF."""
   1459 
   1460     def __init__(self, name, numvfs, use_dhcp=False, use_dhcpv6=False,
   1461                  addresses=None, routes=None, rules=None, mtu=None,
   1462                  primary=False, nic_mapping=None, persist_mapping=False,
   1463                  defroute=True, dhclient_args=None, dns_servers=None,
   1464                  nm_controlled=False, onboot=True, domain=None, members=None,
   1465                  promisc=None, link_mode='legacy', ethtool_opts=None):
   1466         addresses = addresses or []
   1467         routes = routes or []
   1468         rules = rules or []
   1469         dns_servers = dns_servers or []
   1470         super(SriovPF, self).__init__(name, use_dhcp, use_dhcpv6, addresses,
   1471                                       routes, rules, mtu, primary, nic_mapping,
   1472                                       persist_mapping, defroute,
   1473                                       dhclient_args, dns_servers,
   1474                                       nm_controlled, onboot, domain)
   1475         self.numvfs = int(numvfs)
   1476         mapped_nic_names = mapped_nics(nic_mapping)
   1477         if name in mapped_nic_names:
   1478             self.name = mapped_nic_names[name]
   1479         else:
   1480             self.name = name
   1481         self.promisc = promisc
   1482         self.link_mode = link_mode
   1483         self.ethtool_opts = ethtool_opts
~~~

Version-Release number of selected component (if applicable):
os-net-config in OSP16.x and upstream.

How reproducible:
Everytime

Steps to Reproduce:
1. Add ethtool_opts option to sriov vf
2.
3.

Actual results:
os-net-config exited with an error.

Expected results:
os-net-config can handle ethtool_opts for SRIOV VF.

Additional info:


Note You need to log in before you can comment on or make changes to this bug.