diff options
| author | Eric Cheng <none@none> | 2008-12-04 18:16:10 -0800 |
|---|---|---|
| committer | Eric Cheng <none@none> | 2008-12-04 18:16:10 -0800 |
| commit | da14cebe459d3275048785f25bd869cb09b5307f (patch) | |
| tree | a394d2c61ec4d7591782a4a5db4e3a157c3ca89a /usr/src/uts/common/os/strsubr.c | |
| parent | 03361682bf38acf5bcc36ee83a0d6277731eee68 (diff) | |
| download | illumos-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.c | 51 |
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. |
