summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/inet
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/common/inet')
-rw-r--r--usr/src/uts/common/inet/ip.h7
-rw-r--r--usr/src/uts/common/inet/ip/ip.c15
-rw-r--r--usr/src/uts/common/inet/ip/ip_squeue.c4
3 files changed, 18 insertions, 8 deletions
diff --git a/usr/src/uts/common/inet/ip.h b/usr/src/uts/common/inet/ip.h
index 7ff59d9b84..079b88d8e5 100644
--- a/usr/src/uts/common/inet/ip.h
+++ b/usr/src/uts/common/inet/ip.h
@@ -2968,6 +2968,8 @@ extern uint32_t ipsechw_debug;
struct ipsec_out_s;
+struct mac_header_info_s;
+
extern const char *dlpi_prim_str(int);
extern const char *dlpi_err_str(int);
extern void ill_frag_timer(void *);
@@ -3002,7 +3004,8 @@ extern int ip_reassemble(mblk_t *, ipf_t *, uint_t, boolean_t, ill_t *,
extern int ip_opt_set_ill(conn_t *, int, boolean_t, boolean_t,
int, int, mblk_t *);
extern void ip_rput(queue_t *, mblk_t *);
-extern void ip_input(ill_t *, ill_rx_ring_t *, mblk_t *, size_t);
+extern void ip_input(ill_t *, ill_rx_ring_t *, mblk_t *,
+ struct mac_header_info_s *);
extern void ip_rput_dlpi(queue_t *, mblk_t *);
extern void ip_rput_forward(ire_t *, ipha_t *, mblk_t *, ill_t *);
extern void ip_rput_forward_multicast(ipaddr_t, mblk_t *, ipif_t *);
@@ -3308,7 +3311,7 @@ extern int ip_squeue_bind_get(queue_t *, mblk_t *, caddr_t, cred_t *);
extern void ip_squeue_clean(void *, mblk_t *, void *);
extern void ip_resume_tcp_bind(void *, mblk_t *, void *);
extern void ip_soft_ring_assignment(ill_t *, ill_rx_ring_t *,
- mblk_t *, size_t);
+ mblk_t *, struct mac_header_info_s *);
extern void tcp_wput(queue_t *, mblk_t *);
diff --git a/usr/src/uts/common/inet/ip/ip.c b/usr/src/uts/common/inet/ip/ip.c
index aa0d4f3ead..00a1e4275f 100644
--- a/usr/src/uts/common/inet/ip/ip.c
+++ b/usr/src/uts/common/inet/ip/ip.c
@@ -836,8 +836,6 @@ static int ip_conn_report(queue_t *, mblk_t *, caddr_t, cred_t *);
static mblk_t *ip_tcp_input(mblk_t *, ipha_t *, ill_t *, boolean_t,
ire_t *, mblk_t *, uint_t, queue_t *, ill_rx_ring_t *);
-void ip_input(ill_t *, ill_rx_ring_t *, mblk_t *, size_t);
-
static void ip_rput_process_forward(queue_t *, mblk_t *, ire_t *,
ipha_t *, ill_t *, boolean_t);
@@ -14358,7 +14356,7 @@ ip_rput(queue_t *q, mblk_t *mp)
TRACE_2(TR_FAC_IP, TR_IP_RPUT_END,
"ip_rput_end: q %p (%S)", q, "end");
- ip_input(ill, NULL, mp, 0);
+ ip_input(ill, NULL, mp, NULL);
}
/*
@@ -14369,10 +14367,19 @@ ip_rput(queue_t *q, mblk_t *mp)
*
* The ill will always be valid if this function is called directly from
* the driver.
+ *
+ * If ip_input() is called from GLDv3:
+ *
+ * - This must be a non-VLAN IP stream.
+ * - 'mp' is either an untagged or a special priority-tagged packet.
+ * - Any VLAN tag that was in the MAC header has been stripped.
+ *
+ * Thus, there is no need to adjust b_rptr in this function.
*/
/* ARGSUSED */
void
-ip_input(ill_t *ill, ill_rx_ring_t *ip_ring, mblk_t *mp_chain, size_t hdrlen)
+ip_input(ill_t *ill, ill_rx_ring_t *ip_ring, mblk_t *mp_chain,
+ struct mac_header_info_s *mhip)
{
ipaddr_t dst = NULL;
ipaddr_t prev_dst;
diff --git a/usr/src/uts/common/inet/ip/ip_squeue.c b/usr/src/uts/common/inet/ip/ip_squeue.c
index 417b1580eb..5c1da7c964 100644
--- a/usr/src/uts/common/inet/ip/ip_squeue.c
+++ b/usr/src/uts/common/inet/ip/ip_squeue.c
@@ -596,7 +596,7 @@ ip_squeue_soft_ring_affinity(void *arg)
/* ARGSUSED */
void
ip_soft_ring_assignment(ill_t *ill, ill_rx_ring_t *ip_ring,
-mblk_t *mp_chain, size_t hdrlen)
+ mblk_t *mp_chain, struct mac_header_info_s *mhip)
{
ip_taskq_arg_t *taskq_arg;
boolean_t refheld;
@@ -645,7 +645,7 @@ mblk_t *mp_chain, size_t hdrlen)
kmem_free(taskq_arg, sizeof (ip_taskq_arg_t));
out:
- ip_input(ill, NULL, mp_chain, hdrlen);
+ ip_input(ill, NULL, mp_chain, mhip);
}
static squeue_t *