Lines Matching refs:mp

97 static void	icmp_addr_req(queue_t *q, mblk_t *mp);
98 static void icmp_tpi_bind(queue_t *q, mblk_t *mp);
102 static void icmp_capability_req(queue_t *q, mblk_t *mp);
105 static void icmp_tpi_connect(queue_t *q, mblk_t *mp);
106 static void icmp_tpi_disconnect(queue_t *q, mblk_t *mp);
107 static void icmp_err_ack(queue_t *q, mblk_t *mp, t_scalar_t t_error,
109 static void icmp_err_ack_prim(queue_t *q, mblk_t *mp, t_scalar_t primitive,
111 static void icmp_icmp_input(void *arg1, mblk_t *mp, void *arg2,
113 static void icmp_icmp_error_ipv6(conn_t *connp, mblk_t *mp,
115 static void icmp_info_req(queue_t *q, mblk_t *mp);
137 static void icmp_ud_err(queue_t *q, mblk_t *mp, t_scalar_t err);
138 static void icmp_tpi_unbind(queue_t *q, mblk_t *mp);
139 static void icmp_wput(queue_t *q, mblk_t *mp);
140 static void icmp_wput_fallback(queue_t *q, mblk_t *mp);
141 static void icmp_wput_other(queue_t *q, mblk_t *mp);
142 static void icmp_wput_iocdata(queue_t *q, mblk_t *mp);
143 static void icmp_wput_restricted(queue_t *q, mblk_t *mp);
308 icmp_tpi_bind(queue_t *q, mblk_t *mp)
328 cr = msg_getcred(mp, NULL);
331 icmp_err_ack(q, mp, TSYSERR, EINVAL);
336 if ((mp->b_wptr - mp->b_rptr) < sizeof (*tbr)) {
339 (uint_t)(mp->b_wptr - mp->b_rptr));
340 icmp_err_ack(q, mp, TPROTO, 0);
347 icmp_err_ack(q, mp, TOUTSTATE, 0);
355 mp1 = reallocb(mp, sizeof (struct T_bind_ack) + sizeof (sin6_t), 1);
357 icmp_err_ack(q, mp, TSYSERR, ENOMEM);
360 mp = mp1;
363 DB_TYPE(mp) = M_PCPROTO;
364 tbr = (struct T_bind_req *)mp->b_rptr;
374 mp->b_wptr = (uchar_t *)&sin[1];
383 mp->b_wptr = (uchar_t *)&sin6[1];
390 sa = (struct sockaddr *)mi_offset_param(mp, tbr->ADDR_offset,
395 sa = (struct sockaddr *)mi_offset_param(mp,
402 icmp_err_ack(q, mp, TBADADDR, 0);
409 icmp_err_ack(q, mp, TSYSERR, error);
411 icmp_err_ack(q, mp, -error, 0);
415 qreply(q, mp);
617 icmp_tpi_connect(queue_t *q, mblk_t *mp)
633 cr = msg_getcred(mp, &pid);
636 icmp_err_ack(q, mp, TSYSERR, EINVAL);
640 tcr = (struct T_conn_req *)mp->b_rptr;
642 if ((mp->b_wptr - mp->b_rptr) < sizeof (struct T_conn_req)) {
643 icmp_err_ack(q, mp, TPROTO, 0);
648 icmp_err_ack(q, mp, TBADOPT, 0);
656 icmp_err_ack(q, mp, TBADADDR, 0);
659 sa = (struct sockaddr *)mi_offset_param(mp, tcr->DEST_offset,
663 sa = (struct sockaddr *)mi_offset_param(mp,
670 icmp_err_ack(q, mp, TSYSERR, error);
677 icmp_err_ack(q, mp, -error, 0);
679 icmp_err_ack(q, mp, 0, error);
697 icmp_err_ack(q, mp, TSYSERR, ENOMEM);
704 mp = mi_tpi_ok_ack_alloc(mp);
705 if (mp == NULL) {
710 putnext(connp->conn_rq, mp);
1064 icmp_tpi_disconnect(queue_t *q, mblk_t *mp)
1073 mp = reallocb(mp, sizeof (struct T_error_ack), 1);
1074 if (mp == NULL) {
1076 icmp_err_ack_prim(q, mp, T_DISCON_REQ, TSYSERR, ENOMEM);
1084 icmp_err_ack(q, mp, 0, error);
1086 icmp_err_ack(q, mp, -error, 0);
1089 mp = mi_tpi_ok_ack_alloc(mp);
1090 ASSERT(mp != NULL);
1091 qreply(q, mp);
1111 icmp_err_ack(queue_t *q, mblk_t *mp, t_scalar_t t_error, int sys_error)
1113 if ((mp = mi_tpi_err_ack_alloc(mp, t_error, sys_error)) != NULL)
1114 qreply(q, mp);
1119 icmp_err_ack_prim(queue_t *q, mblk_t *mp, t_scalar_t primitive,
1124 if ((mp = tpi_ack_alloc(mp, sizeof (struct T_error_ack),
1126 teackp = (struct T_error_ack *)mp->b_rptr;
1130 qreply(q, mp);
1141 icmp_icmp_input(void *arg1, mblk_t *mp, void *arg2, ip_recv_attr_t *ira)
1152 ipha = (ipha_t *)mp->b_rptr;
1154 ASSERT(OK_32PTR(mp->b_rptr));
1158 icmp_icmp_error_ipv6(connp, mp, ira);
1166 icmph = (icmph_t *)&mp->b_rptr[iph_hdr_length];
1223 freemsg(mp);
1232 freemsg(mp);
1261 freemsg(mp);
1271 icmp_icmp_error_ipv6(conn_t *connp, mblk_t *mp, ip_recv_attr_t *ira)
1282 outer_ip6h = (ip6_t *)mp->b_rptr;
1285 iph_hdr_length = ip_hdr_length_v6(mp, outer_ip6h);
1292 icmp6 = (icmp6_t *)&mp->b_rptr[iph_hdr_length];
1295 if (!ip_hdr_length_nexthdr_v6(mp, ip6h, &iph_hdr_length, &nexthdrp)) {
1296 freemsg(mp);
1374 freemsg(mp);
1392 freemsg(mp);
1401 freemsg(mp);
1431 freemsg(mp);
1442 icmp_addr_req(queue_t *q, mblk_t *mp)
1452 ackmp = reallocb(mp, sizeof (struct T_addr_ack) +
1455 icmp_err_ack(q, mp, TSYSERR, ENOMEM);
1536 icmp_capability_req(queue_t *q, mblk_t *mp)
1542 cap_bits1 = ((struct T_capability_req *)mp->b_rptr)->CAP_bits1;
1544 mp = tpi_ack_alloc(mp, sizeof (struct T_capability_ack),
1545 mp->b_datap->db_type, T_CAPABILITY_ACK);
1546 if (!mp)
1549 tcap = (struct T_capability_ack *)mp->b_rptr;
1553 qreply(q, mp);
1562 icmp_info_req(queue_t *q, mblk_t *mp)
1567 mp = tpi_ack_alloc(mp, sizeof (struct T_info_ack), M_PCPROTO,
1569 if (!mp)
1571 icmp_copy_info((struct T_info_ack *)mp->b_rptr, icmp);
1572 qreply(q, mp);
2380 mblk_t *mp;
2386 mp = conn_prepend_hdr(ixa, ipp, v6src, v6dst, connp->conn_proto,
2388 if (mp == NULL) {
2413 ipha_t *ipha = (ipha_t *)mp->b_rptr;
2417 ip6_t *ip6h = (ip6_t *)mp->b_rptr;
2435 if (cksum_offset + sizeof (short) > MBLKL(mp)) {
2438 mp1 = msgpullup(mp,
2440 freemsg(mp);
2445 mp = mp1;
2446 ip6h = (ip6_t *)mp->b_rptr;
2448 ptr = (uint16_t *)(mp->b_rptr + cksum_offset);
2454 return (mp);
2482 icmp_queue_fallback(icmp_t *icmp, mblk_t *mp)
2491 icmp->icmp_fallback_queue_head = mp;
2492 icmp->icmp_fallback_queue_tail = mp;
2495 icmp->icmp_fallback_queue_tail->b_next = mp;
2496 icmp->icmp_fallback_queue_tail = mp;
2503 return (mp);
2509 * TPI, then we'll queue the mp for later processing.
2512 icmp_ulp_recv(conn_t *connp, mblk_t *mp, uint_t len)
2518 ASSERT(len == msgdsize(mp));
2520 (connp->conn_upper_handle, mp, len, 0, &error, NULL) < 0) {
2538 mp = icmp_queue_fallback(icmp, mp);
2540 if (mp != NULL)
2541 putnext(connp->conn_rq, mp);
2546 putnext(connp->conn_rq, mp);
2557 icmp_input(void *arg1, mblk_t *mp, void *arg2, ip_recv_attr_t *ira)
2579 rptr = mp->b_rptr;
2581 ASSERT(DB_TYPE(mp) == M_DATA);
2583 ASSERT(ira->ira_pktlen == msgdsize(mp));
2596 ASSERT(MBLKL(mp) >= ip_hdr_length); /* IP did a pullup */
2603 ASSERT(MBLKL(mp) >= sizeof (ipha_t));
2606 ipha = (ipha_t *)mp->b_rptr;
2618 if (mp->b_datap->db_ref > 1) {
2627 freemsg(mp);
2633 mp->b_rptr = rptr + ip_hdr_length;
2636 mp1->b_cont = mp;
2638 mp = mp1;
2663 recv_ancillary, ira, mp, &ipps);
2669 freemsg(mp);
2673 mp1->b_cont = mp;
2723 (void) ip_find_hdr_v6(mp, ip6h, B_TRUE, &ipps, &nexthdr);
2747 type = mp->b_rptr[ip_hdr_length];
2749 ASSERT(mp->b_rptr + ip_hdr_length <= mp->b_wptr);
2752 freemsg(mp);
2764 remlen = msgdsize(mp) - ip_hdr_length;
2771 sum = IP_CSUM(mp, ip_hdr_length, sum);
2776 freemsg(mp);
2787 recv_ancillary, ira, mp, &ipps);
2792 freemsg(mp);
2796 mp1->b_cont = mp;
2828 mp->b_rptr += ip_hdr_length;
2894 * passed in mp. This message is freed.
2897 icmp_ud_err(queue_t *q, mblk_t *mp, t_scalar_t err)
2906 if ((mp->b_wptr < mp->b_rptr) ||
2907 (MBLKL(mp)) < sizeof (struct T_unitdata_req)) {
2910 tudr = (struct T_unitdata_req *)mp->b_rptr;
2911 destaddr = mp->b_rptr + tudr->DEST_offset;
2912 if (destaddr < mp->b_rptr || destaddr >= mp->b_wptr ||
2913 destaddr + tudr->DEST_length < mp->b_rptr ||
2914 destaddr + tudr->DEST_length > mp->b_wptr) {
2917 optaddr = mp->b_rptr + tudr->OPT_offset;
2918 if (optaddr < mp->b_rptr || optaddr >= mp->b_wptr ||
2919 optaddr + tudr->OPT_length < mp->b_rptr ||
2920 optaddr + tudr->OPT_length > mp->b_wptr) {
2932 freemsg(mp);
2971 icmp_tpi_unbind(queue_t *q, mblk_t *mp)
2976 ASSERT(mp->b_cont == NULL);
2980 icmp_err_ack(q, mp, -error, 0);
2982 icmp_err_ack(q, mp, 0, error);
2988 * Convert mp into a T_OK_ACK
2991 mp = mi_tpi_ok_ack_alloc(mp);
2997 ASSERT(mp != NULL);
2998 ASSERT(((struct T_ok_ack *)mp->b_rptr)->PRIM_type == T_OK_ACK);
2999 qreply(q, mp);
3013 icmp_output_hdrincl(conn_t *connp, mblk_t *mp, cred_t *cr, pid_t pid)
3038 freemsg(mp);
3065 freemsg(mp);
3073 freemsg(mp);
3078 ipha = (ipha_t *)mp->b_rptr;
3081 if ((mp->b_wptr - mp->b_rptr) < IP_SIMPLE_HDR_LENGTH) {
3082 if (!pullupmsg(mp, IP_SIMPLE_HDR_LENGTH)) {
3084 freemsg(mp);
3087 ipha = (ipha_t *)mp->b_rptr;
3160 freemsg(mp);
3190 freemsg(mp);
3204 mp->b_rptr += IP_SIMPLE_HDR_LENGTH;
3206 mp = icmp_prepend_hdr(connp, ixa, ipp, &v6src, &v6dst, 0, mp, &error);
3207 if (mp == NULL) {
3215 freemsg(mp);
3219 ipha = (ipha_t *)mp->b_rptr;
3248 if (mp->b_wptr - mp->b_rptr < ip_hdr_length + tp_hdr_len) {
3249 if (!pullupmsg(mp, ip_hdr_length + tp_hdr_len)) {
3251 if (mp->b_cont == NULL)
3255 freemsg(mp);
3267 mp = ip_output_attach_policy(mp, ipha, NULL, connp, ixa);
3268 if (mp == NULL) {
3278 error = conn_ip_output(mp, ixa);
3306 icmp_output_attach_policy(mblk_t *mp, conn_t *connp, ip_xmit_attr_t *ixa)
3312 ipha = (ipha_t *)mp->b_rptr;
3314 ip6h = (ip6_t *)mp->b_rptr;
3321 return (ip_output_attach_policy(mp, ipha, ip6h, connp, ixa));
3329 * Always consumes mp; never consumes tudr_mp.
3332 icmp_output_ancillary(conn_t *connp, sin_t *sin, sin6_t *sin6, mblk_t *mp,
3360 freemsg(mp);
3383 freemsg(mp);
3391 freemsg(mp);
3423 freemsg(mp);
3546 freemsg(mp);
3574 freemsg(mp);
3579 mp = icmp_prepend_hdr(connp, ixa, ipp, &v6src, &v6dst, flowinfo, mp,
3581 if (mp == NULL) {
3589 freemsg(mp);
3594 mp = icmp_output_attach_policy(mp, connp, ixa);
3595 if (mp == NULL) {
3604 error = conn_ip_output(mp, ixa);
3651 icmp_output_connected(conn_t *connp, mblk_t *mp, cred_t *cr, pid_t pid)
3666 freemsg(mp);
3686 mp = icmp_prepend_header_template(connp, ixa, mp,
3689 if (mp == NULL) {
3697 freemsg(mp);
3703 mp = icmp_output_attach_policy(mp, connp, ixa);
3704 if (mp == NULL) {
3769 freemsg(mp);
3780 error = conn_ip_output(mp, ixa);
3811 icmp_output_lastdst(conn_t *connp, mblk_t *mp, cred_t *cr, pid_t pid,
3838 mp = icmp_prepend_header_template(connp, ixa, mp,
3841 if (mp == NULL) {
3849 freemsg(mp);
3855 mp = icmp_output_attach_policy(mp, connp, ixa);
3856 if (mp == NULL) {
3921 freemsg(mp);
3931 error = conn_ip_output(mp, ixa);
3978 icmp_prepend_header_template(conn_t *connp, ip_xmit_attr_t *ixa, mblk_t *mp,
3996 pktlen = copylen + msgdsize(mp);
3998 freemsg(mp);
4005 iph = mp->b_rptr - copylen;
4006 if (DB_REF(mp) != 1 || iph < DB_BASE(mp) || !OK_32PTR(iph)) {
4011 freemsg(mp);
4016 mp1->b_cont = mp;
4017 mp = mp1;
4018 iph = (mp->b_wptr - copylen);
4020 mp->b_rptr = iph;
4092 if (cksum_offset + sizeof (short) > MBLKL(mp)) {
4095 mp1 = msgpullup(mp,
4097 freemsg(mp);
4102 mp = mp1;
4103 iph = mp->b_rptr;
4106 ptr = (uint16_t *)(mp->b_rptr + cksum_offset);
4111 return (mp);
4120 icmp_wput(queue_t *q, mblk_t *mp)
4141 switch (DB_TYPE(mp)) {
4145 freemsg(mp);
4150 tudr = (struct T_unitdata_req *)mp->b_rptr;
4151 if (MBLKL(mp) < sizeof (*tudr) ||
4152 ((t_primp_t)mp->b_rptr)->type != T_UNITDATA_REQ) {
4153 icmp_wput_other(q, mp);
4159 icmp_wput_other(q, mp);
4164 data_mp = mp->b_cont;
4169 mp->b_cont = NULL;
4171 if (!MBLKIN(mp, 0, tudr->DEST_offset + tudr->DEST_length)) {
4182 cr = msg_getcred(mp, &pid);
4199 addr = (struct sockaddr *)&mp->b_rptr[tudr->DEST_offset];
4244 data_mp, mp, NULL, cr, pid);
4275 freeb(mp);
4301 freeb(mp);
4320 data_mp, mp, NULL, cr, pid);
4350 freeb(mp);
4355 ASSERT(mp != NULL);
4356 /* mp is freed by the following routine */
4357 icmp_ud_err(q, mp, (t_scalar_t)error);
4363 ASSERT(mp != NULL);
4364 /* mp is freed by the following routine */
4365 icmp_ud_err(q, mp, (t_scalar_t)error);
4703 icmp_wput_fallback(queue_t *q, mblk_t *mp)
4708 freemsg(mp);
4712 icmp_wput_other(queue_t *q, mblk_t *mp)
4714 uchar_t *rptr = mp->b_rptr;
4720 switch (mp->b_datap->db_type) {
4723 if (mp->b_wptr - rptr < sizeof (t_scalar_t)) {
4728 freemsg(mp);
4733 icmp_addr_req(q, mp);
4737 icmp_tpi_bind(q, mp);
4740 icmp_tpi_connect(q, mp);
4743 icmp_capability_req(q, mp);
4746 icmp_info_req(q, mp);
4754 icmp_ud_err(q, mp, EADDRNOTAVAIL);
4757 icmp_tpi_unbind(q, mp);
4767 cr = msg_getcred(mp, NULL);
4770 icmp_err_ack(q, mp, TSYSERR, EINVAL);
4774 if (!snmpcom_req(q, mp, icmp_snmp_set, ip_snmp_get,
4776 svr4_optcom_req(q, mp, cr, &icmp_opt_obj);
4788 cr = msg_getcred(mp, NULL);
4791 icmp_err_ack(q, mp, TSYSERR, EINVAL);
4794 tpi_optcom_req(q, mp, cr, &icmp_opt_obj);
4798 icmp_tpi_disconnect(q, mp);
4804 icmp_err_ack(q, mp, TNOTSUPPORT, 0);
4811 icmp_err_ack(q, mp, TNOTSUPPORT, 0);
4822 iocp = (struct iocblk *)mp->b_rptr;
4833 mp->b_datap->db_type = M_IOCACK;
4834 qreply(q, mp);
4845 mi_copyin(q, mp, NULL,
4853 icmp_wput_iocdata(q, mp);
4859 ip_wput_nondata(q, mp);
4867 icmp_wput_iocdata(queue_t *q, mblk_t *mp)
4876 switch (((struct iocblk *)mp->b_rptr)->ioc_cmd) {
4881 ip_wput_nondata(q, mp);
4885 switch (mi_copy_state(q, mp, &mp1)) {
4895 mi_copyout(q, mp);
4903 mi_copy_done(q, mp, 0);
4910 mi_copy_done(q, mp, EPROTO);
4919 STRUCT_SET_HANDLE(sb, ((struct iocblk *)mp->b_rptr)->ioc_flag,
4928 mi_copy_done(q, mp, EINVAL);
4931 switch (((struct iocblk *)mp->b_rptr)->ioc_cmd) {
4936 mi_copy_done(q, mp, ENOTCONN);
4941 mi_copy_done(q, mp, EPROTO);
4944 mp1 = mi_copyout_alloc(q, mp, STRUCT_FGETP(sb, buf), addrlen, B_TRUE);
4949 switch (((struct iocblk *)mp->b_rptr)->ioc_cmd) {
4961 mi_copyout(q, mp);
5259 mblk_t *mp, *stropt_mp;
5311 mp = (*quiesced_cb)(connp->conn_upper_handle, arg, &tca,
5320 if (mp != NULL) {
5321 mp->b_next = icmp->icmp_fallback_queue_head;
5322 icmp->icmp_fallback_queue_head = mp;
5325 mp = icmp->icmp_fallback_queue_head;
5326 icmp->icmp_fallback_queue_head = mp->b_next;
5327 mp->b_next = NULL;
5329 putnext(RD(q), mp);
5623 rawip_send(sock_lower_handle_t proto_handle, mblk_t *mp, struct nmsghdr *msg,
5636 ASSERT(DB_TYPE(mp) == M_DATA);
5650 freemsg(mp);
5659 if (mp->b_wptr - mp->b_rptr < IP_SIMPLE_HDR_LENGTH) {
5660 if (!pullupmsg(mp, IP_SIMPLE_HDR_LENGTH)) {
5662 freemsg(mp);
5666 error = icmp_output_hdrincl(connp, mp, cr, pid);
5680 error = icmp_output_ancillary(connp, NULL, NULL, mp,
5683 error = icmp_output_connected(connp, mp, cr, pid);
5763 error = icmp_output_ancillary(connp, NULL, sin6, mp,
5769 error = icmp_output_lastdst(connp, mp, cr, pid, ixa);
5772 error = icmp_output_newdst(connp, mp, NULL, sin6, cr,
5821 error = icmp_output_ancillary(connp, sin, NULL, mp,
5826 error = icmp_output_lastdst(connp, mp, cr, pid, ixa);
5829 error = icmp_output_newdst(connp, mp, sin, NULL, cr,