/**
  * struct nfp_net - NFP network device structure
  * @dp:                        Datapath structure
+ * @id:                        vNIC id within the PF (0 for VFs)
  * @fw_ver:            Firmware version
  * @cap:                Capabilities advertised by the Firmware
  * @max_mtu:            Maximum support MTU advertised by the Firmware
 
        struct nfp_net_fw_version fw_ver;
 
+       u32 id;
+
        u32 cap;
        u32 max_mtu;
 
 void nfp_net_debugfs_create(void);
 void nfp_net_debugfs_destroy(void);
 struct dentry *nfp_net_debugfs_device_add(struct pci_dev *pdev);
-void nfp_net_debugfs_vnic_add(struct nfp_net *nn, struct dentry *ddir, int id);
+void nfp_net_debugfs_vnic_add(struct nfp_net *nn, struct dentry *ddir);
 void nfp_net_debugfs_dir_clean(struct dentry **dir);
 #else
 static inline void nfp_net_debugfs_create(void)
 }
 
 static inline void
-nfp_net_debugfs_vnic_add(struct nfp_net *nn, struct dentry *ddir, int id)
+nfp_net_debugfs_vnic_add(struct nfp_net *nn, struct dentry *ddir)
 {
 }
 
 
        return features;
 }
 
+static int
+nfp_net_get_phys_port_name(struct net_device *netdev, char *name, size_t len)
+{
+       struct nfp_net *nn = netdev_priv(netdev);
+       int n;
+
+       if (nn->port)
+               return nfp_port_get_phys_port_name(netdev, name, len);
+
+       if (!nn->dp.is_vf) {
+               n = snprintf(name, len, "%d", nn->id);
+               if (n >= len)
+                       return -EINVAL;
+       }
+
+       return 0;
+}
+
 /**
  * nfp_net_set_vxlan_port() - set vxlan port in SW and reconfigure HW
  * @nn:   NFP Net device to reconfigure
        .ndo_set_mac_address    = nfp_net_set_mac_address,
        .ndo_set_features       = nfp_net_set_features,
        .ndo_features_check     = nfp_net_features_check,
-       .ndo_get_phys_port_name = nfp_port_get_phys_port_name,
+       .ndo_get_phys_port_name = nfp_net_get_phys_port_name,
        .ndo_udp_tunnel_add     = nfp_net_add_vxlan_port,
        .ndo_udp_tunnel_del     = nfp_net_del_vxlan_port,
        .ndo_bpf                = nfp_net_xdp,
 
        .llseek = seq_lseek
 };
 
-void nfp_net_debugfs_vnic_add(struct nfp_net *nn, struct dentry *ddir, int id)
+void nfp_net_debugfs_vnic_add(struct nfp_net *nn, struct dentry *ddir)
 {
        struct dentry *queues, *tx, *rx, *xdp;
        char name[20];
                return;
 
        if (nfp_net_is_data_vnic(nn))
-               sprintf(name, "vnic%d", id);
+               sprintf(name, "vnic%d", nn->id);
        else
                strcpy(name, "ctrl-vnic");
        nn->debugfs_dir = debugfs_create_dir(name, ddir);
 
 {
        int err;
 
+       nn->id = id;
+
        err = nfp_net_init(nn);
        if (err)
                return err;
 
-       nfp_net_debugfs_vnic_add(nn, pf->ddir, id);
+       nfp_net_debugfs_vnic_add(nn, pf->ddir);
 
        if (nn->port) {
                err = nfp_devlink_port_register(pf->app, nn->port);
 
 
        nfp_net_info(nn);
        vf->ddir = nfp_net_debugfs_device_add(pdev);
-       nfp_net_debugfs_vnic_add(nn, vf->ddir, 0);
+       nfp_net_debugfs_vnic_add(nn, vf->ddir);
 
        return 0;