diff options
Diffstat (limited to 'usr/src/uts/common/inet')
-rw-r--r-- | usr/src/uts/common/inet/ip.h | 7 | ||||
-rw-r--r-- | usr/src/uts/common/inet/ip/ip.c | 15 | ||||
-rw-r--r-- | usr/src/uts/common/inet/ip/ip_squeue.c | 4 |
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 * |