mirror of
https://github.com/torvalds/linux.git
synced 2024-12-04 01:51:34 +00:00
scsi: qedi: Add packet filter in light L2 Rx path.
Add packet filter to avoid unnecessary packet processing in iscsiuio. Signed-off-by: Manish Rangankar <manish.rangankar@cavium.com> Reviewed-by: Lee Duncan <lduncan@suse.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
d5632b11f0
commit
cdd3ff87f1
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user