summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/io/mac/mac_provider.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/common/io/mac/mac_provider.c')
-rw-r--r--usr/src/uts/common/io/mac/mac_provider.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/usr/src/uts/common/io/mac/mac_provider.c b/usr/src/uts/common/io/mac/mac_provider.c
index d739fad87a..cb1a76aef6 100644
--- a/usr/src/uts/common/io/mac/mac_provider.c
+++ b/usr/src/uts/common/io/mac/mac_provider.c
@@ -688,7 +688,7 @@ mac_trill_snoop(mac_handle_t mh, mblk_t *mp)
mac_impl_t *mip = (mac_impl_t *)mh;
if (mip->mi_promisc_list != NULL)
- mac_promisc_dispatch(mip, mp, NULL, B_FALSE);
+ mac_promisc_dispatch(mip, mp, NULL);
}
/*
@@ -708,7 +708,7 @@ mac_rx_common(mac_handle_t mh, mac_resource_handle_t mrh, mblk_t *mp_chain)
* this MAC, pass them a copy if appropriate.
*/
if (mip->mi_promisc_list != NULL)
- mac_promisc_dispatch(mip, mp_chain, NULL, B_FALSE);
+ mac_promisc_dispatch(mip, mp_chain, NULL);
if (mr != NULL) {
/*
@@ -1541,15 +1541,22 @@ mac_hcksum_clone(const mblk_t *src, mblk_t *dst)
ASSERT3U(DB_TYPE(dst), ==, M_DATA);
/*
- * Do these assignments unconditionally, rather than only when flags is
- * non-zero. This protects a situation where zeroed hcksum data does
- * not make the jump onto an mblk_t with stale data in those fields.
+ * Do these assignments unconditionally, rather than only when
+ * flags is non-zero. This protects a situation where zeroed
+ * hcksum data does not make the jump onto an mblk_t with
+ * stale data in those fields. It's important to copy all
+ * possible flags (HCK_* as well as HW_*) and not just the
+ * checksum specific flags. Dropping flags during a clone
+ * could result in dropped packets. If the caller has good
+ * reason to drop those flags then it should do it manually,
+ * after the clone.
*/
- DB_CKSUMFLAGS(dst) = (DB_CKSUMFLAGS(src) & HCK_FLAGS);
+ DB_CKSUMFLAGS(dst) = DB_CKSUMFLAGS(src);
DB_CKSUMSTART(dst) = DB_CKSUMSTART(src);
DB_CKSUMSTUFF(dst) = DB_CKSUMSTUFF(src);
DB_CKSUMEND(dst) = DB_CKSUMEND(src);
DB_CKSUM16(dst) = DB_CKSUM16(src);
+ DB_LSOMSS(dst) = DB_LSOMSS(src);
}
void