On 11/21/18 1:25 AM, Nilesh Javali wrote:
> From: Manish Rangankar <manish.rangan...@cavium.com>
> 
> Add packet filter to avoid unnecessary packet processing in iscsiuio.
> 
> Signed-off-by: Manish Rangankar <manish.rangan...@cavium.com>
> ---
>  drivers/scsi/qedi/qedi_main.c | 24 ++++++++++++++++++++++++
>  1 file changed, 24 insertions(+)
> 
> diff --git a/drivers/scsi/qedi/qedi_main.c b/drivers/scsi/qedi/qedi_main.c
> index 713db9c..2621dee 100644
> --- a/drivers/scsi/qedi/qedi_main.c
> +++ b/drivers/scsi/qedi/qedi_main.c
> @@ -659,6 +659,7 @@ static int qedi_ll2_rx(void *cookie, struct sk_buff *skb, 
> u32 arg1, u32 arg2)
>       struct qedi_uio_dev *udev;
>       struct qedi_uio_ctrl *uctrl;
>       struct skb_work_list *work;
> +     struct ethhdr *eh;
>       u32 prod;
>  
>       if (!qedi) {
> @@ -673,6 +674,29 @@ static int qedi_ll2_rx(void *cookie, struct sk_buff 
> *skb, u32 arg1, u32 arg2)
>               return 0;
>       }
>  
> +     eh = (struct ethhdr *)skb->data;
> +     /* Undo VLAN encapsulation */
> +     if (eh->h_proto == htons(ETH_P_8021Q)) {
> +             memmove((u8 *)eh + VLAN_HLEN, eh, ETH_ALEN * 2);
> +             eh = (struct ethhdr *)skb_pull(skb, VLAN_HLEN);
> +             skb_reset_mac_header(skb);
> +     }
> +
> +     /* Filter out non FIP/FCoE frames here to free them faster */
> +     if (eh->h_proto != htons(ETH_P_ARP) &&
> +         eh->h_proto != htons(ETH_P_IP) &&
> +         eh->h_proto != htons(ETH_P_IPV6)) {
> +             QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_LL2,
> +                       "Dropping frame ethertype [0x%x] len [0x%x].\n",
> +                       eh->h_proto, skb->len);
> +             kfree_skb(skb);
> +             return 0;
> +     }
> +
> +     QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_LL2,
> +               "Allowed frame ethertype [0x%x] len [0x%x].\n",
> +               eh->h_proto, skb->len);
> +
>       udev = qedi->udev;
>       uctrl = udev->uctrl;
>  
> 


Reviewed-by: Lee Duncan <ldun...@suse.com>

Reply via email to