IB/ipath: Discard multicast packets without a GRH
authorBryan O'Sullivan <bos@pathscale.com>
Thu, 15 Mar 2007 21:45:03 +0000 (14:45 -0700)
committerRoland Dreier <rolandd@cisco.com>
Thu, 19 Apr 2007 03:20:57 +0000 (20:20 -0700)
This patch fixes a bug where multicast packets without a GRH were not
being dropped as per the IB spec.

Signed-off-by: Ralph Campbell <ralph.campbell@qlogic.com>
Signed-off-by: Bryan O'Sullivan <bryan.osullivan@qlogic.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
drivers/infiniband/hw/ipath/ipath_verbs.c

index 9bec5a9b4557ec8cd18cd363f33477ac58d706f8..f5604b876500a8d203240757743ae093aaadbb3c 100644 (file)
@@ -438,6 +438,10 @@ void ipath_ib_rcv(struct ipath_ibdev *dev, void *rhdr, void *data,
                struct ipath_mcast *mcast;
                struct ipath_mcast_qp *p;
 
+               if (lnh != IPATH_LRH_GRH) {
+                       dev->n_pkt_drops++;
+                       goto bail;
+               }
                mcast = ipath_mcast_find(&hdr->u.l.grh.dgid);
                if (mcast == NULL) {
                        dev->n_pkt_drops++;
@@ -445,8 +449,7 @@ void ipath_ib_rcv(struct ipath_ibdev *dev, void *rhdr, void *data,
                }
                dev->n_multicast_rcv++;
                list_for_each_entry_rcu(p, &mcast->qp_list, list)
-                       ipath_qp_rcv(dev, hdr, lnh == IPATH_LRH_GRH, data,
-                                    tlen, p->qp);
+                       ipath_qp_rcv(dev, hdr, 1, data, tlen, p->qp);
                /*
                 * Notify ipath_multicast_detach() if it is waiting for us
                 * to finish.