summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/os/strsubr.c
diff options
context:
space:
mode:
authorEric Cheng <none@none>2008-12-04 18:16:10 -0800
committerEric Cheng <none@none>2008-12-04 18:16:10 -0800
commitda14cebe459d3275048785f25bd869cb09b5307f (patch)
treea394d2c61ec4d7591782a4a5db4e3a157c3ca89a /usr/src/uts/common/os/strsubr.c
parent03361682bf38acf5bcc36ee83a0d6277731eee68 (diff)
downloadillumos-joyent-da14cebe459d3275048785f25bd869cb09b5307f.tar.gz
PSARC/2006/357 Crossbow - Network Virtualization and Resource Management
6498311 Crossbow - Network Virtualization and Resource Management 6402493 DLPI provider loopback behavior should be improved 6453165 move mac capabs definitions outside mac.h 6338667 Need ability to use NAT for non-global zones 6692884 several threads hung due to deadlock scenario between aggr and mac 6768302 dls: soft_ring_bind/unbind race can panic in thread_affinity_set with cpu_id == -1 6635849 race between lacp_xmit_sm() and aggr_m_stop() ends in panic 6742712 potential message double free in the aggr driver 6754299 a potential race between aggr_m_tx() and aggr_port_delete() 6485324 mi_data_lock recursively held when enabling promiscuous mode on an aggregation 6442559 Forwarding perf bottleneck due to mac_rx() calls 6505462 assertion failure after removing a port from a snooped aggregation 6716664 need to add src/dst IP address to soft ring fanout --HG-- rename : usr/src/uts/common/io/dls/dls_soft_ring.c => usr/src/uts/common/io/mac/mac_soft_ring.c rename : usr/src/uts/common/inet/ip/ip_cksum.c => usr/src/uts/common/os/ip_cksum.c rename : usr/src/uts/common/inet/sctp_crc32.c => usr/src/uts/common/os/sctp_crc32.c rename : usr/src/uts/common/sys/dls_soft_ring.h => usr/src/uts/common/sys/mac_soft_ring.h
Diffstat (limited to 'usr/src/uts/common/os/strsubr.c')
-rw-r--r--usr/src/uts/common/os/strsubr.c51
1 files changed, 39 insertions, 12 deletions
diff --git a/usr/src/uts/common/os/strsubr.c b/usr/src/uts/common/os/strsubr.c
index cd8a0a2a62..442ced2b51 100644
--- a/usr/src/uts/common/os/strsubr.c
+++ b/usr/src/uts/common/os/strsubr.c
@@ -27,8 +27,6 @@
* Use is subject to license terms.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#include <sys/types.h>
#include <sys/sysmacros.h>
#include <sys/param.h>
@@ -8450,18 +8448,25 @@ hcksum_retrieve(mblk_t *mp, multidata_t *mmd, pdesc_t *pd,
ASSERT(DB_TYPE(mp) == M_DATA || DB_TYPE(mp) == M_MULTIDATA);
if (mp->b_datap->db_type == M_DATA) {
if (flags != NULL) {
- *flags = DB_CKSUMFLAGS(mp);
- if (*flags & HCK_PARTIALCKSUM) {
- if (start != NULL)
- *start = (uint32_t)DB_CKSUMSTART(mp);
- if (stuff != NULL)
- *stuff = (uint32_t)DB_CKSUMSTUFF(mp);
- if (end != NULL)
- *end = (uint32_t)DB_CKSUMEND(mp);
+ *flags = DB_CKSUMFLAGS(mp) & (HCK_IPV4_HDRCKSUM |
+ HCK_PARTIALCKSUM | HCK_FULLCKSUM |
+ HCK_FULLCKSUM_OK);
+ if ((*flags & (HCK_PARTIALCKSUM |
+ HCK_FULLCKSUM)) != 0) {
if (value != NULL)
*value = (uint32_t)DB_CKSUM16(mp);
- } else if ((*flags & HW_LSO) && (value != NULL))
- *value = (uint32_t)DB_LSOMSS(mp);
+ if ((*flags & HCK_PARTIALCKSUM) != 0) {
+ if (start != NULL)
+ *start =
+ (uint32_t)DB_CKSUMSTART(mp);
+ if (stuff != NULL)
+ *stuff =
+ (uint32_t)DB_CKSUMSTUFF(mp);
+ if (end != NULL)
+ *end =
+ (uint32_t)DB_CKSUMEND(mp);
+ }
+ }
}
} else {
pattrinfo_t hck_attr = {PATTR_HCKSUM};
@@ -8488,6 +8493,28 @@ hcksum_retrieve(mblk_t *mp, multidata_t *mmd, pdesc_t *pd,
}
}
+void
+lso_info_set(mblk_t *mp, uint32_t mss, uint32_t flags)
+{
+ ASSERT(DB_TYPE(mp) == M_DATA);
+
+ /* Set the flags */
+ DB_LSOFLAGS(mp) |= flags;
+ DB_LSOMSS(mp) = mss;
+}
+
+void
+lso_info_get(mblk_t *mp, uint32_t *mss, uint32_t *flags)
+{
+ ASSERT(DB_TYPE(mp) == M_DATA);
+
+ if (flags != NULL) {
+ *flags = DB_CKSUMFLAGS(mp) & HW_LSO;
+ if ((*flags != 0) && (mss != NULL))
+ *mss = (uint32_t)DB_LSOMSS(mp);
+ }
+}
+
/*
* Checksum buffer *bp for len bytes with psum partial checksum,
* or 0 if none, and return the 16 bit partial checksum.