Commit cdd3ff87 authored by Manish Rangankar's avatar Manish Rangankar Committed by Martin K. Petersen

scsi: qedi: Add packet filter in light L2 Rx path.

Add packet filter to avoid unnecessary packet processing in iscsiuio.
Signed-off-by: default avatarManish Rangankar <manish.rangankar@cavium.com>
Reviewed-by: default avatarLee Duncan <lduncan@suse.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent d5632b11
...@@ -659,6 +659,7 @@ static int qedi_ll2_rx(void *cookie, struct sk_buff *skb, u32 arg1, u32 arg2) ...@@ -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_dev *udev;
struct qedi_uio_ctrl *uctrl; struct qedi_uio_ctrl *uctrl;
struct skb_work_list *work; struct skb_work_list *work;
struct ethhdr *eh;
u32 prod; u32 prod;
if (!qedi) { if (!qedi) {
...@@ -673,6 +674,29 @@ static int qedi_ll2_rx(void *cookie, struct sk_buff *skb, u32 arg1, u32 arg2) ...@@ -673,6 +674,29 @@ static int qedi_ll2_rx(void *cookie, struct sk_buff *skb, u32 arg1, u32 arg2)
return 0; 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; udev = qedi->udev;
uctrl = udev->uctrl; uctrl = udev->uctrl;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment