summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/io/overlay
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/common/io/overlay')
-rw-r--r--usr/src/uts/common/io/overlay/overlay.c11
-rw-r--r--usr/src/uts/common/io/overlay/plugins/overlay_vxlan.c9
2 files changed, 12 insertions, 8 deletions
diff --git a/usr/src/uts/common/io/overlay/overlay.c b/usr/src/uts/common/io/overlay/overlay.c
index 7aba941fd6..73c3c1ebb7 100644
--- a/usr/src/uts/common/io/overlay/overlay.c
+++ b/usr/src/uts/common/io/overlay/overlay.c
@@ -1066,6 +1066,16 @@ overlay_tx_checksum_shift(mblk_t *mp, uint16_t flags)
}
}
+static inline void
+overlay_tx_lso_copy(const mblk_t *src, mblk_t *dst)
+{
+ uint16_t flags = DB_LSOFLAGS(src) & HW_LSO_FLAGS;
+ if (flags == 0)
+ return;
+ DB_LSOFLAGS(dst) |= flags;
+ DB_LSOMSS(dst) = DB_LSOMSS(src);
+}
+
mblk_t *
overlay_m_tx(void *arg, mblk_t *mp_chain)
{
@@ -1123,6 +1133,7 @@ overlay_m_tx(void *arg, mblk_t *mp_chain)
*/
overlay_tx_checksum_shift(ep, DB_CKSUMFLAGS(mp));
if (ep != mp) {
+ overlay_tx_lso_copy(mp, ep);
ep->b_cont = mp;
}
diff --git a/usr/src/uts/common/io/overlay/plugins/overlay_vxlan.c b/usr/src/uts/common/io/overlay/plugins/overlay_vxlan.c
index 60659ade8c..30568873a5 100644
--- a/usr/src/uts/common/io/overlay/plugins/overlay_vxlan.c
+++ b/usr/src/uts/common/io/overlay/plugins/overlay_vxlan.c
@@ -385,10 +385,6 @@ vxlan_o_mac_capab(void *arg, mac_capab_t capab, void *cap_data, ksocket_t ksock)
switch (capab) {
case MAC_CAPAB_HCKSUM:
- /*
- * XXX Almost certainly some things are going to need the right
- * psuedo-header on transmit.
- */
if ((vxl->vxl_utunnel.uto_cksum_flags & (HCKSUM_VXLAN_FULL |
HCKSUM_VXLAN_PSEUDO | HCKSUM_VXLAN_PSEUDO_NO_OL4)) != 0) {
uint32_t *hck = cap_data;
@@ -404,18 +400,15 @@ vxlan_o_mac_capab(void *arg, mac_capab_t capab, void *cap_data, ksocket_t ksock)
hcapab = B_TRUE;
}
break;
-#if 0
case MAC_CAPAB_LSO:
if ((vxl->vxl_utunnel.uto_lso_flags & DLD_LSO_VXLAN_TCP_IPV4) != 0) {
mac_capab_lso_t *lso = cap_data;
lso->lso_flags = LSO_TX_BASIC_TCP_IPV4;
- /* XXX Check value */
lso->lso_basic_tcp_ipv4.lso_max =
- vxl->vxl_utunnel.uto_lso_max - 100;
+ vxl->vxl_utunnel.uto_lso_tcp_max - 1024;
hcapab = B_TRUE;
}
break;
-#endif
default:
hcapab = B_FALSE;
break;