1090
1091 ret = odd->odd_plugin->ovp_ops->ovpo_encap(odd->odd_mh, mp,
1092 &einfo, &ep);
1093 if (ret != 0 || ep == NULL) {
1094 freemsg(mp);
1095 goto out;
1096 }
1097
1098 ASSERT(ep->b_cont == mp || ep == mp);
1099 ret = overlay_mux_tx(odd->odd_mux, &hdr, ep);
1100 if (ret != 0)
1101 goto out;
1102
1103 mp = mp_chain;
1104 }
1105
1106 out:
1107 mutex_enter(&odd->odd_lock);
1108 overlay_io_done(odd, OVERLAY_F_IN_TX);
1109 mutex_exit(&odd->odd_lock);
1110 return (mp_chain);
1111 }
1112
1113 /* ARGSUSED */
1114 static void
1115 overlay_m_ioctl(void *arg, queue_t *q, mblk_t *mp)
1116 {
1117 miocnak(q, mp, 0, ENOTSUP);
1118 }
1119
1120 /* ARGSUSED */
1121 static boolean_t
1122 overlay_m_getcapab(void *arg, mac_capab_t cap, void *cap_data)
1123 {
1124 /*
1125 * Tell MAC we're an overlay.
1126 */
1127 if (cap == MAC_CAPAB_OVERLAY)
1128 return (B_TRUE);
1129 return (B_FALSE);
1130 }
|
1090
1091 ret = odd->odd_plugin->ovp_ops->ovpo_encap(odd->odd_mh, mp,
1092 &einfo, &ep);
1093 if (ret != 0 || ep == NULL) {
1094 freemsg(mp);
1095 goto out;
1096 }
1097
1098 ASSERT(ep->b_cont == mp || ep == mp);
1099 ret = overlay_mux_tx(odd->odd_mux, &hdr, ep);
1100 if (ret != 0)
1101 goto out;
1102
1103 mp = mp_chain;
1104 }
1105
1106 out:
1107 mutex_enter(&odd->odd_lock);
1108 overlay_io_done(odd, OVERLAY_F_IN_TX);
1109 mutex_exit(&odd->odd_lock);
1110 freemsgchain(mp_chain);
1111 return (NULL);
1112 }
1113
1114 /* ARGSUSED */
1115 static void
1116 overlay_m_ioctl(void *arg, queue_t *q, mblk_t *mp)
1117 {
1118 miocnak(q, mp, 0, ENOTSUP);
1119 }
1120
1121 /* ARGSUSED */
1122 static boolean_t
1123 overlay_m_getcapab(void *arg, mac_capab_t cap, void *cap_data)
1124 {
1125 /*
1126 * Tell MAC we're an overlay.
1127 */
1128 if (cap == MAC_CAPAB_OVERLAY)
1129 return (B_TRUE);
1130 return (B_FALSE);
1131 }
|