uint64_t ops;
static uint32_t instance;
+ /* Advanced filtering is a prerequisite */
+ if (!vnic_dev_capable_adv_filters(vdev))
+ return 0;
/* flowman devcmd available? */
if (!vnic_dev_capable(vdev, CMD_FLOW_MANAGER_OP))
return 0;
return 1;
}
-/* Determine the "best" filtering mode VIC is capaible of. Returns one of 4
- * value or 0 on error:
+/* Determine the "best" filtering mode VIC is capable of. Returns one of 4
+ * value or 0 if filtering is unavailble:
* FILTER_FLOWMAN- flowman api capable
* FILTER_DPDK_1- advanced filters availabile
* FILTER_USNIC_IP_FLAG - advanced filters but with the restriction that
args[0] = CMD_ADD_FILTER;
args[1] = 0;
err = vnic_dev_cmd_args(vdev, CMD_CAPABILITY, args, 2, 1000);
+ /*
+ * ERR_EPERM may be returned if, for example, vNIC is
+ * on a VF. It simply means no filtering is available
+ */
+ if (err == -ERR_EPERM) {
+ *mode = 0;
+ return 0;
+ }
if (err)
return err;
max_level = args[1];
err = vnic_dev_cmd(vdev, CMD_ADDR_ADD, &a0, &a1, wait);
if (err)
- pr_err("Can't add addr [%02x:%02x:%02x:%02x:%02x:%02x], %d\n",
+ pr_err("Can't add addr [" RTE_ETHER_ADDR_PRT_FMT "], %d\n",
addr[0], addr[1], addr[2], addr[3], addr[4], addr[5],
err);
err = vnic_dev_cmd(vdev, CMD_ADDR_DEL, &a0, &a1, wait);
if (err)
- pr_err("Can't del addr [%02x:%02x:%02x:%02x:%02x:%02x], %d\n",
+ pr_err("Can't del addr [" RTE_ETHER_ADDR_PRT_FMT "], %d\n",
addr[0], addr[1], addr[2], addr[3], addr[4], addr[5],
err);