lkml.org 
[lkml]   [2022]   [Aug]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.18 33/88] octeontx2-pf: Fix UDP/TCP src and dst port tc filters
    Date
    From: Subbaraya Sundeep <sbhatta@marvell.com>

    commit 59e1be6f83b928a04189bbf3ab683a1fc6248db3 upstream.

    Check the mask for non-zero value before installing tc filters
    for L4 source and destination ports. Otherwise installing a
    filter for source port installs destination port too and
    vice-versa.

    Fixes: 1d4d9e42c240 ("octeontx2-pf: Add tc flower hardware offload on ingress traffic")
    Signed-off-by: Subbaraya Sundeep <sbhatta@marvell.com>
    Signed-off-by: Sunil Goutham <sgoutham@marvell.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c | 30 +++++++++++--------
    1 file changed, 18 insertions(+), 12 deletions(-)

    --- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c
    +++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c
    @@ -614,21 +614,27 @@ static int otx2_tc_prepare_flow(struct o

    flow_spec->dport = match.key->dst;
    flow_mask->dport = match.mask->dst;
    - if (ip_proto == IPPROTO_UDP)
    - req->features |= BIT_ULL(NPC_DPORT_UDP);
    - else if (ip_proto == IPPROTO_TCP)
    - req->features |= BIT_ULL(NPC_DPORT_TCP);
    - else if (ip_proto == IPPROTO_SCTP)
    - req->features |= BIT_ULL(NPC_DPORT_SCTP);
    +
    + if (flow_mask->dport) {
    + if (ip_proto == IPPROTO_UDP)
    + req->features |= BIT_ULL(NPC_DPORT_UDP);
    + else if (ip_proto == IPPROTO_TCP)
    + req->features |= BIT_ULL(NPC_DPORT_TCP);
    + else if (ip_proto == IPPROTO_SCTP)
    + req->features |= BIT_ULL(NPC_DPORT_SCTP);
    + }

    flow_spec->sport = match.key->src;
    flow_mask->sport = match.mask->src;
    - if (ip_proto == IPPROTO_UDP)
    - req->features |= BIT_ULL(NPC_SPORT_UDP);
    - else if (ip_proto == IPPROTO_TCP)
    - req->features |= BIT_ULL(NPC_SPORT_TCP);
    - else if (ip_proto == IPPROTO_SCTP)
    - req->features |= BIT_ULL(NPC_SPORT_SCTP);
    +
    + if (flow_mask->sport) {
    + if (ip_proto == IPPROTO_UDP)
    + req->features |= BIT_ULL(NPC_SPORT_UDP);
    + else if (ip_proto == IPPROTO_TCP)
    + req->features |= BIT_ULL(NPC_SPORT_TCP);
    + else if (ip_proto == IPPROTO_SCTP)
    + req->features |= BIT_ULL(NPC_SPORT_SCTP);
    + }
    }

    return otx2_tc_parse_actions(nic, &rule->action, req, f, node);

    \
     
     \ /
      Last update: 2022-08-01 14:17    [W:4.768 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site