.ndo_set_vf_trust = ice_set_vf_trust,
        .ndo_set_vf_vlan = ice_set_vf_port_vlan,
        .ndo_set_vf_link_state = ice_set_vf_link_state,
+       .ndo_get_vf_stats = ice_get_vf_stats,
        .ndo_vlan_rx_add_vid = ice_vlan_rx_add_vid,
        .ndo_vlan_rx_kill_vid = ice_vlan_rx_kill_vid,
        .ndo_set_features = ice_set_features,
 
 
        return 0;
 }
+
+/**
+ * ice_get_vf_stats - populate some stats for the VF
+ * @netdev: the netdev of the PF
+ * @vf_id: the host OS identifier (0-255)
+ * @vf_stats: pointer to the OS memory to be initialized
+ */
+int ice_get_vf_stats(struct net_device *netdev, int vf_id,
+                    struct ifla_vf_stats *vf_stats)
+{
+       struct ice_pf *pf = ice_netdev_to_pf(netdev);
+       struct ice_eth_stats *stats;
+       struct ice_vsi *vsi;
+       struct ice_vf *vf;
+
+       if (ice_validate_vf_id(pf, vf_id))
+               return -EINVAL;
+
+       vf = &pf->vf[vf_id];
+
+       if (ice_check_vf_init(pf, vf))
+               return -EBUSY;
+
+       vsi = pf->vsi[vf->lan_vsi_idx];
+       if (!vsi)
+               return -EINVAL;
+
+       ice_update_eth_stats(vsi);
+       stats = &vsi->eth_stats;
+
+       memset(vf_stats, 0, sizeof(*vf_stats));
+
+       vf_stats->rx_packets = stats->rx_unicast + stats->rx_broadcast +
+               stats->rx_multicast;
+       vf_stats->tx_packets = stats->tx_unicast + stats->tx_broadcast +
+               stats->tx_multicast;
+       vf_stats->rx_bytes   = stats->rx_bytes;
+       vf_stats->tx_bytes   = stats->tx_bytes;
+       vf_stats->broadcast  = stats->rx_broadcast;
+       vf_stats->multicast  = stats->rx_multicast;
+       vf_stats->rx_dropped = stats->rx_discards;
+       vf_stats->tx_dropped = stats->tx_discards;
+
+       return 0;
+}
 
 int ice_calc_vf_reg_idx(struct ice_vf *vf, struct ice_q_vector *q_vector);
 
 void ice_set_vf_state_qs_dis(struct ice_vf *vf);
+int
+ice_get_vf_stats(struct net_device *netdev, int vf_id,
+                struct ifla_vf_stats *vf_stats);
 #else /* CONFIG_PCI_IOV */
 #define ice_process_vflr_event(pf) do {} while (0)
 #define ice_free_vfs(pf) do {} while (0)
 {
        return 0;
 }
+
+static inline int
+ice_get_vf_stats(struct net_device __always_unused *netdev,
+                int __always_unused vf_id,
+                struct ifla_vf_stats __always_unused *vf_stats)
+{
+       return -EOPNOTSUPP;
+}
 #endif /* CONFIG_PCI_IOV */
 #endif /* _ICE_VIRTCHNL_PF_H_ */