X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fcxgbe%2Fcxgbe_flow.c;h=10fc6fc6e27c9fd828b793f9646cbf8b9343ce98;hb=24c1d49ac82f35ba999d93c4d1d5ee6930259b5f;hp=138d0758fcccb57d594a44f5e72491a4cc7ec5bb;hpb=caa01424337c5bc26c30817723d8001b86784645;p=dpdk.git diff --git a/drivers/net/cxgbe/cxgbe_flow.c b/drivers/net/cxgbe/cxgbe_flow.c index 138d0758fc..10fc6fc6e2 100644 --- a/drivers/net/cxgbe/cxgbe_flow.c +++ b/drivers/net/cxgbe/cxgbe_flow.c @@ -159,9 +159,9 @@ cxgbe_fill_filter_region(struct adapter *adap, ntuple_mask |= (u64)(fs->val.ovlan_vld << 16 | fs->mask.ovlan) << tp->vnic_shift; else if (fs->mask.pfvf_vld) - ntuple_mask |= (u64)((fs->mask.pfvf_vld << 16) | - (fs->mask.pf << 13)) << - tp->vnic_shift; + ntuple_mask |= (u64)(fs->mask.pfvf_vld << 16 | + fs->mask.pf << 13 | + fs->mask.vf) << tp->vnic_shift; } if (tp->tos_shift >= 0) ntuple_mask |= (u64)fs->mask.tos << tp->tos_shift; @@ -316,6 +316,34 @@ ch_rte_parsetype_pf(const void *dmask __rte_unused, return 0; } +static int +ch_rte_parsetype_vf(const void *dmask, const struct rte_flow_item *item, + struct ch_filter_specification *fs, + struct rte_flow_error *e) +{ + const struct rte_flow_item_vf *umask = item->mask; + const struct rte_flow_item_vf *val = item->spec; + const struct rte_flow_item_vf *mask; + + /* If user has not given any mask, then use chelsio supported mask. */ + mask = umask ? umask : (const struct rte_flow_item_vf *)dmask; + + CXGBE_FILL_FS(1, 1, pfvf_vld); + + if (!val) + return 0; /* Wildcard, match all Vf */ + + if (val->id > UCHAR_MAX) + return rte_flow_error_set(e, EINVAL, + RTE_FLOW_ERROR_TYPE_ITEM, + item, + "VF ID > MAX(255)"); + + CXGBE_FILL_FS(val->id, mask->id, vf); + + return 0; +} + static int ch_rte_parsetype_udp(const void *dmask, const struct rte_flow_item *item, struct ch_filter_specification *fs, @@ -948,6 +976,13 @@ static struct chrte_fparse parseitem[] = { .fptr = ch_rte_parsetype_pf, .dmask = NULL, }, + + [RTE_FLOW_ITEM_TYPE_VF] = { + .fptr = ch_rte_parsetype_vf, + .dmask = &(const struct rte_flow_item_vf){ + .id = 0xffffffff, + } + }, }; static int