TWSD-836 Interface Speed Mismatch on Virtual Instance which is configured on AVX x900 using Virtual switch

Review Request #1040 — Created Aug. 29, 2025 and submitted

ngurunathan
APV10
rel_10_7_3
TWSD-836
mmiriam, pradeep, tanya, wli

Speed of interfaces created via vSwitch bound to AVX can't be determined in the VA instance correctly. Currently, in APV the interfaces with driver "net_virtio" is considered as 10G and counted as a 10G interface in "Network interfaces" section of "show version".
To avoid confusion, made change to consider "net_virtio" as a vTAP Interface instead of 10G interface. Added another group "vTAP Interfaces" in "Network Interfaces" section and displayed the count of interfaces created via vSwitch.

Tested locally:

In AVX:
show va portmapping apv_new mgmt fc:e1:fb:9d:7a:16
Instance Name Sequence Assigned AVX Port Resource MAC VA Port ID
apv_new 1 mgmt fc:e1:fb:9d:7a:16 port1
2 port1.4 fc:e1:fb:9e:45:03 port2
3 vs5.vport6 fc:e1:fb:9d:7a:10 port3

"show version" in vAPV:
ArrayOS Rel.APV.10.7.3.22 - untagged unofficial build by uid=0(root) gid=0(root) groups=0(root) on dev_nandita: on Fri Aug 29 05:57:20 2025

    Host name : AN
   System CPU : Intel(R) Xeon(R) CPU
   System RAM : 3880560 kbytes.

System boot time : Fri Aug 29 03:33:34 GMT (+0000) 2025
Current time : Fri Aug 29 04:23:27 GMT (+0000) 2025
System up time : 50 mins, 23 secs
Platform Bld Date : Fri Aug 29 03:32:36 GMT 2025
SSL HW : HW (1X5H+) Initialized
Compression HW : 1XC35v, Initialized
Network Interface : 1 x Gigabit Ethernet copper
1 x 10Gigabit Ethernet fiber
1 x vTAP Interfaces
Model : Array AVX vAPV
Serial Number : 6C04ABBDF5DD907716077347275026
Licensed Limits : vCPUs(x1), NICs(x4), RAM(2 GB), Bandwidth(450 Gbps)
Licensed Features : WebWall Clustering L4SLB L7SLB Caching
SSL tProxy SwCompression LLB QoS MultiLang
DynRoute IPv6 SWMaintenance
License Key : e1254d8b-f89d935d-eca1d12b-30dc63c6-bd769526-030b8280-1454d8

Description From Last Updated

Is these change necessary? I feel like we only need to display vtap interface correctly from CLI. Add it to …

wliwli
mmiriam
  1. Ship It!
  2. 
      
pradeep
  1. Ship It!
  2. 
      
wli
  1. Ship It!
  2. 
      
wli
  1. 
      
  2. Is these change necessary?

    I feel like we only need to display vtap interface correctly from CLI.

    Add it to feactl is a bit risky since it may affect how license generated/applied.

    1. When the license is valid, the network interfaces info to be displayed seems to be taken from previously populated feactl_p. If license is invalid, the info seems to be taken from "get_network_interfaces" by iterating through the interfaces. Without adding virt_nics to feactl, unable to display vtap interface correctly in cli when license is valid.

          if_info.tg_nics = feactl_p->tg_nics;
          if_info.fb_tg_nics = feactl_p->fb_tg_nics;
          if_info.mlxen_nics = feactl_p->mlxen_nics;
          if_info.i40e_nics = feactl_p->i40e_nics;
          if_info.t5g_nics = feactl_p->t5g_nics;
          if_info.hg_nics = feactl_p->hg_nics;
          if_info.wx_1g_nic = feactl_p->wx_1g_nic;
          if_info.virt_nics = feactl_p->virt_nics;
      

          if (feactl_p->ca_model_idx == AFM_INVALID_MODEL) {
                  memset(&if_info, 0, sizeof(if_info));
      
                  if (get_interface_info(&if_info) == -1) {
                          syslog(LOG_EMERG, "show_license call get_interface_info.get_interface_info return -1....\n");
                          fastlog_static(LOG_CRIT, FC_INF_READ_ERR);
                          return(0);
                  }
          }
      

      As you mentioned regarding licensing, currently maximum NICs is enforced by adding 10g NICs, 1g NICs and fxp NICs. Either virtual NICs need to be added to the total NICs or virtual NICs need to be considered as 10G NIC for this purpose.

          if (data_p->if_info_p->g_nics > 0) {
                  total_nics = data_p->if_info_p->g_nics;
          } else if (data_p->if_info_p->fxp_nics > 0) {
                  total_nics = data_p->if_info_p->fxp_nics;
          }
          /*
           * Not sure if 10G interfaces are mutually exculsive from non-10G
           * interfaces.  Either way, it's safest to just add the two together.
           */
          if (data_p->if_info_p->tg_nics > 0) {
                  total_nics += data_p->if_info_p->tg_nics;
          }
      
          /*
          * Read licensed number of NICs from the license key data
          */
          uint64_t features = data_p->features;
          int max_vapv_nics = AFM_GET_FEACTL_NIC(features);
      
          /*
           * Compare actual number of NICs with the number of licensed NICs
           */
          if (total_nics > max_vapv_nics) {
                  printf(ARRAY_PRODINFO_vAPV" license only allows %d network interface(s).\n", max_vapv_nics);
                  return (-1);
          }
      
    2. As network interface info needs to be taken from feactl when the license is valid, marking this issue as fixed as per discussion with Wang Li

  3. 
      
ngurunathan
ngurunathan
Review request changed

Status: Closed (submitted)

Loading...