Lines Matching refs:ixa
135 conn_ip_output(mblk_t *mp, ip_xmit_attr_t *ixa)
137 iaflags_t ixaflags = ixa->ixa_flags;
142 ip_stack_t *ipst = ixa->ixa_ipst;
147 ASSERT(ixa->ixa_ire != NULL);
149 ASSERT(ixa->ixa_dce != NULL); /* Could be default dce */
152 ASSERT(ixa->ixa_curthread == NULL);
153 ixa->ixa_curthread = curthread;
161 ire = ixa->ixa_ire;
190 if (ire->ire_generation != ixa->ixa_ire_generation) {
191 error = ip_verify_ire(mp, ixa);
197 ire = ixa->ixa_ire;
201 ASSERT(ixa->ixa_curthread == curthread);
202 ixa->ixa_curthread = NULL;
206 return ((ire->ire_sendfn)(ire, mp, mp->b_rptr, ixa,
211 * ixa->ixa_dce_generation = DCE_GENERATION_VERIFY;
225 ASSERT(ixa->ixa_nce != NULL);
226 nce = ixa->ixa_nce;
228 error = ip_verify_nce(mp, ixa);
254 ire = ixa->ixa_ire;
258 ASSERT(ixa->ixa_curthread == curthread);
259 ixa->ixa_curthread = NULL;
264 ixa, &ipst->ips_dce_default->dce_ident));
266 ASSERT(ixa->ixa_nce != NULL);
267 nce = ixa->ixa_nce;
283 dce = ixa->ixa_dce;
308 if (dce->dce_generation != ixa->ixa_dce_generation) {
309 error = ip_verify_dce(mp, ixa);
315 dce = ixa->ixa_dce;
339 ixa->ixa_src_generation != ipst->ips_src_generation) {
343 if (!ip_verify_src(mp, ixa, &gen)) {
351 ixa->ixa_src_generation = gen;
372 ASSERT(ixa->ixa_curthread == curthread);
373 ixa->ixa_curthread = NULL;
375 return ((ire->ire_sendfn)(ire, mp, mp->b_rptr, ixa, &dce->dce_ident));
387 ASSERT(ixa->ixa_curthread == curthread);
388 ixa->ixa_curthread = NULL;
401 ip_verify_src(mblk_t *mp, ip_xmit_attr_t *ixa, uint_t *generationp)
403 ip_stack_t *ipst = ixa->ixa_ipst;
415 if (ixa->ixa_flags & IXAF_IS_IPV4) {
421 return (ip_laddr_verify_v4(ipha->ipha_src, ixa->ixa_zoneid,
430 if (ixa->ixa_flags & IXAF_SCOPEID_SET)
431 scopeid = ixa->ixa_scopeid;
435 return (ip_laddr_verify_v6(&ip6h->ip6_src, ixa->ixa_zoneid,
444 ip_verify_ire(mblk_t *mp, ip_xmit_attr_t *ixa)
458 ire = ip_select_route_pkt(mp, ixa, &gen, &error, &multirt);
465 if (ixa->ixa_ire != NULL)
466 ire_refrele_notr(ixa->ixa_ire);
471 ixa->ixa_ire = ire;
472 ixa->ixa_ire_generation = gen;
474 if (ixa->ixa_flags & IXAF_IS_IPV4)
475 ixa->ixa_postfragfn = ip_postfrag_multirt_v4;
477 ixa->ixa_postfragfn = ip_postfrag_multirt_v6;
478 ixa->ixa_flags |= IXAF_MULTIRT_MULTICAST;
480 ixa->ixa_postfragfn = ire->ire_postfragfn;
481 ixa->ixa_flags &= ~IXAF_MULTIRT_MULTICAST;
490 ASSERT(ixa->ixa_ire_generation == IRE_GENERATION_VERIFY);
491 ixa->ixa_dce_generation = DCE_GENERATION_VERIFY;
502 ixa->ixa_ire_generation = IRE_GENERATION_VERIFY;
503 ixa->ixa_dce_generation = DCE_GENERATION_VERIFY;
506 if (nce == ixa->ixa_nce) {
517 ixa->ixa_dce_generation = DCE_GENERATION_VERIFY;
519 if (ixa->ixa_nce != NULL)
520 nce_refrele(ixa->ixa_nce);
521 ixa->ixa_nce = nce;
529 ip_verify_nce(mblk_t *mp, ip_xmit_attr_t *ixa)
531 ire_t *ire = ixa->ixa_ire;
542 nce = ire_handle_condemned_nce(ixa->ixa_nce, ire, ipha, ip6h, B_TRUE);
545 return (ip_verify_ire(mp, ixa));
552 if (ixa->ixa_flags & IXAF_VERIFY_LSO) {
553 if (!ip_verify_lso(nce->nce_ill, ixa)) {
554 ASSERT(ixa->ixa_notify != NULL);
555 ixa->ixa_notify(ixa->ixa_notify_cookie, ixa,
568 if (ixa->ixa_flags & IXAF_VERIFY_ZCOPY) {
569 if (!ip_verify_zcopy(nce->nce_ill, ixa)) {
570 ASSERT(ixa->ixa_notify != NULL);
571 ixa->ixa_notify(ixa->ixa_notify_cookie, ixa,
573 if ((ixa->ixa_flags & IXAF_ZCOPY_CAPAB) == 0)
583 ixa->ixa_dce_generation = DCE_GENERATION_VERIFY;
585 nce_refrele(ixa->ixa_nce);
586 ixa->ixa_nce = nce;
594 ip_verify_dce(mblk_t *mp, ip_xmit_attr_t *ixa)
600 dce = dce_lookup_pkt(mp, ixa, &gen);
603 dce_refrele_notr(ixa->ixa_dce);
608 ixa->ixa_dce = dce;
609 ixa->ixa_dce_generation = gen;
612 pmtu = ip_get_pmtu(ixa);
629 if (ixa->ixa_flags & IXAF_VERIFY_PMTU) {
630 if (ixa->ixa_pmtu != pmtu) {
631 uint_t oldmtu = ixa->ixa_pmtu;
634 uint32_t, ixa->ixa_pmtu);
635 ASSERT(ixa->ixa_notify != NULL);
636 ixa->ixa_notify(ixa->ixa_notify_cookie, ixa,
642 ixa->ixa_fragsize = pmtu;
652 ip_verify_lso(ill_t *ill, ip_xmit_attr_t *ixa)
654 ill_lso_capab_t *lsoc = &ixa->ixa_lso_capab;
657 if (ixa->ixa_flags & IXAF_LSO_CAPAB) {
661 if ((ixa->ixa_flags & IXAF_IPSEC_SECURE) ||
662 (ixa->ixa_ire->ire_type & (IRE_LOCAL | IRE_LOOPBACK)) ||
663 (ixa->ixa_ire->ire_flags & RTF_MULTIRT) ||
664 ((ixa->ixa_flags & IXAF_IS_IPV4) ?
667 ixa->ixa_flags &= ~IXAF_LSO_CAPAB;
673 * Capability has changed, refresh the copy in ixa.
681 if (!(ixa->ixa_flags & IXAF_IPSEC_SECURE) &&
682 !(ixa->ixa_ire->ire_type & (IRE_LOCAL | IRE_LOOPBACK)) &&
683 !(ixa->ixa_ire->ire_flags & RTF_MULTIRT) &&
684 ((ixa->ixa_flags & IXAF_IS_IPV4) ?
688 ixa->ixa_flags |= IXAF_LSO_CAPAB;
702 ip_verify_zcopy(ill_t *ill, ip_xmit_attr_t *ixa)
704 if (ixa->ixa_flags & IXAF_ZCOPY_CAPAB) {
708 if ((ixa->ixa_flags & IXAF_IPSEC_SECURE) ||
709 (ixa->ixa_ire->ire_type & (IRE_LOCAL | IRE_LOOPBACK)) ||
710 (ixa->ixa_ire->ire_flags & RTF_MULTIRT) ||
712 ixa->ixa_flags &= ~IXAF_ZCOPY_CAPAB;
717 if (!(ixa->ixa_flags & IXAF_IPSEC_SECURE) &&
718 !(ixa->ixa_ire->ire_type & (IRE_LOCAL | IRE_LOOPBACK)) &&
719 !(ixa->ixa_ire->ire_flags & RTF_MULTIRT) &&
721 ixa->ixa_flags |= IXAF_ZCOPY_CAPAB;
754 * ixa->ixa_protocol
763 ip_output_simple(mblk_t *mp, ip_xmit_attr_t *ixa)
768 ASSERT(ixa->ixa_ipst != NULL);
771 ip_stack_t *ipst = ixa->ixa_ipst;
773 if (ixa->ixa_flags & IXAF_IS_IPV4) {
774 err = tsol_check_label_v4(ixa->ixa_tsl, ixa->ixa_zoneid,
775 &mp, CONN_MAC_DEFAULT, B_FALSE, ixa->ixa_ipst,
778 err = tsol_check_label_v6(ixa->ixa_tsl, ixa->ixa_zoneid,
779 &mp, CONN_MAC_DEFAULT, B_FALSE, ixa->ixa_ipst,
792 ip_xmit_attr_replace_tsl(ixa, effective_tsl);
796 if (ixa->ixa_flags & IXAF_IS_IPV4)
797 return (ip_output_simple_v4(mp, ixa));
799 return (ip_output_simple_v6(mp, ixa));
803 ip_output_simple_v4(mblk_t *mp, ip_xmit_attr_t *ixa)
814 iaflags_t ixaflags = ixa->ixa_flags;
815 ip_stack_t *ipst = ixa->ixa_ipst;
829 ASSERT(ixa->ixa_flags & IXAF_IS_IPV4);
831 ASSERT(ixa->ixa_nce == NULL);
833 ixa->ixa_pktlen = ntohs(ipha->ipha_length);
834 ASSERT(ixa->ixa_pktlen == msgdsize(mp));
835 ixa->ixa_ip_hdr_length = IPH_HDR_LENGTH(ipha);
836 ixa->ixa_protocol = ipha->ipha_protocol;
850 ire = ip_select_route_v4(firsthop, ipha->ipha_src, ixa, NULL,
865 ixa->ixa_fragsize = IP_MAXPACKET;
871 error = (ire->ire_sendfn)(ire, mp, ipha, ixa,
915 ixa->ixa_postfragfn = ip_postfrag_multirt_v4;
916 ixa->ixa_flags |= IXAF_MULTIRT_MULTICAST;
918 ixa->ixa_postfragfn = ire->ire_postfragfn;
919 ixa->ixa_flags &= ~IXAF_MULTIRT_MULTICAST;
921 ASSERT(ixa->ixa_nce == NULL);
922 ixa->ixa_nce = nce;
931 ixa->ixa_fragsize = ip_get_base_mtu(nce->nce_ill, ire);
948 ixa->ixa_fragsize = ip_get_base_mtu(nce->nce_ill, ire);
955 ixa->ixa_fragsize = fragsize;
958 ixa->ixa_fragsize = ip_get_base_mtu(nce->nce_ill, ire);
981 ixa->ixa_multicast_ifaddr, ixa->ixa_zoneid, ipst,
995 if (!ip_verify_src(mp, ixa, NULL)) {
1013 ASSERT(ixa->ixa_ipsec_policy == NULL);
1014 mp = ip_output_attach_policy(mp, ipha, NULL, NULL, ixa);
1045 error = (ire->ire_sendfn)(ire, mp, ipha, ixa, &dce->dce_ident);
1052 if (ixa->ixa_nce != NULL)
1053 nce_refrele(ixa->ixa_nce);
1054 ixa->ixa_nce = NULL;
1077 ip_xmit_attr_t *ixa, uint32_t *identp)
1080 ip_stack_t *ipst = ixa->ixa_ipst;
1083 uint_t pktlen = ixa->ixa_pktlen;
1138 szone = ixa->ixa_zoneid;
1148 /* Map ixa to ira including IPsec policies */
1149 ipsec_out_to_in(ixa, ill, &iras);
1215 /* We moved any IPsec refs from ixa to iras */
1229 ip_xmit_attr_t *ixa, uint32_t *identp)
1232 ip_stack_t *ipst = ixa->ixa_ipst;
1237 iaflags_t ixaflags = ixa->ixa_flags;
1244 if (!(ixa->ixa_flags & IXAF_NO_TTL_CHANGE)) {
1256 ipha->ipha_ttl = ixa->ixa_broadcast_ttl;
1264 ixa->ixa_flags |= IXAF_LOOPBACK_COPY | IXAF_NO_HW_CKSUM;
1267 if (irb->irb_ire_cnt == 1 || ixa->ixa_ifindex != 0)
1268 return (ire_send_wire_v4(ire, mp, ipha, ixa, identp));
1295 if (ixa->ixa_zoneid != ALL_ZONES &&
1321 if (ixa->ixa_flags & IXAF_SET_SOURCE) {
1329 ip_output_simple_broadcast(ixa, mp1);
1334 ipha1->ipha_dst, INADDR_ANY, ixa->ixa_zoneid, ipst,
1349 ASSERT(ixa->ixa_ipsec_policy == NULL);
1351 NULL, ixa);
1372 nce_orig = ixa->ixa_nce;
1373 ixa->ixa_nce = nce1;
1380 (void) ire_send_wire_v4(ire1, mp1, ipha1, ixa, identp);
1383 ixa->ixa_nce = nce_orig;
1386 ixa->ixa_flags &= ~IXAF_LOOPBACK_COPY;
1399 return (ire_send_wire_v4(ire, mp, ipha, ixa, identp));
1407 ip_output_simple_broadcast(ip_xmit_attr_t *ixa, mblk_t *mp)
1413 ixas.ixa_zoneid = ixa->ixa_zoneid;
1415 ixas.ixa_ipst = ixa->ixa_ipst;
1416 ixas.ixa_cred = ixa->ixa_cred;
1417 ixas.ixa_cpid = ixa->ixa_cpid;
1418 ixas.ixa_tsl = ixa->ixa_tsl;
1427 multirt_check_v4(ire_t *ire, ipha_t *ipha, ip_xmit_attr_t *ixa)
1429 ip_stack_t *ipst = ixa->ixa_ipst;
1439 ixa->ixa_flags |= IXAF_NO_TTL_CHANGE;
1447 ixa->ixa_flags |= IXAF_NO_TTL_CHANGE;
1456 ip_xmit_attr_t *ixa, uint32_t *identp)
1459 ip_stack_t *ipst = ixa->ixa_ipst;
1461 iaflags_t ixaflags = ixa->ixa_flags;
1468 multirt_check_v4(ire, ipha, ixa);
1493 ixa->ixa_flags &= ~(IXAF_LOOPBACK_COPY | IXAF_NO_HW_CKSUM);
1496 ixa->ixa_flags |= IXAF_LOOPBACK_COPY | IXAF_NO_HW_CKSUM;
1503 ixa->ixa_flags |= IXAF_LOOPBACK_COPY | IXAF_NO_HW_CKSUM;
1510 ixa->ixa_zoneid)) {
1511 ixa->ixa_flags |= IXAF_NO_LOOP_ZONEID_SET;
1512 ixa->ixa_no_loop_zoneid = ixa->ixa_zoneid;
1513 ixa->ixa_flags |= IXAF_LOOPBACK_COPY | IXAF_NO_HW_CKSUM;
1522 ipha->ipha_ttl = ixa->ixa_multicast_ttl;
1525 return (ire_send_wire_v4(ire, mp, ipha, ixa, identp));
1533 ip_xmit_attr_t *ixa, uint32_t *identp)
1537 multirt_check_v4(ire, ipha, ixa);
1540 return (ire_send_multicast_v4(ire, mp, ipha, ixa, identp));
1542 return (ire_send_broadcast_v4(ire, mp, ipha, ixa, identp));
1544 return (ire_send_wire_v4(ire, mp, ipha, ixa, identp));
1552 ip_xmit_attr_t *ixa, uint32_t *identp)
1554 ip_stack_t *ipst = ixa->ixa_ipst;
1585 !(ixa->ixa_flags & IRAF_IS_IPV4), &dummy, ipst);
1592 /* Map ixa to ira including IPsec policies */
1593 ipsec_out_to_in(ixa, ill, &iras);
1600 /* We moved any IPsec refs from ixa to iras */
1613 ip_output_sw_cksum_v4(mblk_t *mp, ipha_t *ipha, ip_xmit_attr_t *ixa)
1615 ip_stack_t *ipst = ixa->ixa_ipst;
1616 uint_t pktlen = ixa->ixa_pktlen;
1619 uint8_t protocol = ixa->ixa_protocol;
1620 uint16_t ip_hdr_length = ixa->ixa_ip_hdr_length;
1701 ip_xmit_attr_t *ixa, ill_t *ill)
1703 uint_t pktlen = ixa->ixa_pktlen;
1707 uint8_t protocol = ixa->ixa_protocol;
1708 uint16_t ip_hdr_length = ixa->ixa_ip_hdr_length;
1712 return (ip_output_sw_cksum_v4(mp, ipha, ixa));
1814 return (ip_output_sw_cksum_v4(mp, ipha, ixa));
1829 ip_xmit_attr_t *ixa, uint32_t *identp)
1831 ip_stack_t *ipst = ixa->ixa_ipst;
1833 iaflags_t ixaflags = ixa->ixa_flags;
1836 ASSERT(ixa->ixa_nce != NULL);
1837 ill = ixa->ixa_nce->nce_ill;
1875 ixa->ixa_extra_ident + 1);
1879 ixa->ixa_extra_ident + 1);
1921 ixaflags = ixa->ixa_flags |= IXAF_NO_HW_CKSUM;
1923 if (ip_output_options(mp, ipha, ixa, ill)) {
1934 if (is_system_labeled() && ixa->ixa_tsl != NULL &&
1939 newcr = copycred_from_tslabel(ixa->ixa_cred, ixa->ixa_tsl,
1952 if (ixa->ixa_pktlen > ixa->ixa_fragsize ||
1956 pktlen = ixa->ixa_pktlen;
1958 pktlen += ipsec_out_extra_length(ixa);
1968 if (!ip_output_sw_cksum_v4(mp, ipha, ixa)) {
1991 if ((pktlen > ixa->ixa_fragsize) &&
1997 uint_t, ixa->ixa_fragsize, uint_t, ixa->ixa_pktlen,
1998 uint_t, ixa->ixa_pmtu);
2001 /* Map ixa to ira including IPsec policies */
2002 ipsec_out_to_in(ixa, ill, &iras);
2005 icmp_frag_needed(mp, ixa->ixa_fragsize, &iras);
2006 /* We moved any IPsec refs from ixa to iras */
2011 uint_t, ixa->ixa_fragsize, uint_t, ixa->ixa_pktlen,
2012 uint_t, ixa->ixa_pmtu);
2020 return (ipsec_out_process(mp, ixa));
2022 return (ip_fragment_v4(mp, ixa->ixa_nce, ixaflags,
2023 ixa->ixa_pktlen, ixa->ixa_fragsize, ixa->ixa_xmit_hint,
2024 ixa->ixa_zoneid, ixa->ixa_no_loop_zoneid,
2025 ixa->ixa_postfragfn, &ixa->ixa_cookie));
2030 if (!ip_output_cksum_v4(ixaflags, mp, ipha, ixa, ill)) {
2041 return ((ixa->ixa_postfragfn)(mp, ixa->ixa_nce, ixaflags,
2042 ixa->ixa_pktlen, ixa->ixa_xmit_hint, ixa->ixa_zoneid,
2043 ixa->ixa_no_loop_zoneid, &ixa->ixa_cookie));
2398 ip_output_verify_local(ip_xmit_attr_t *ixa)
2400 ire_t *ire = ixa->ixa_ire;
2405 return (ixa->ixa_ire->ire_generation == ixa->ixa_ire_generation);
2415 ip_output_process_local(mblk_t *mp, ip_xmit_attr_t *ixa, boolean_t hooks_out,
2418 ill_t *ill = ixa->ixa_ire->ire_ill;
2421 ip_stack_t *ipst = ixa->ixa_ipst;
2422 iaflags_t ixaflags = ixa->ixa_flags;
2445 dzone = ixa->ixa_ire->ire_zoneid;
2446 szone = ixa->ixa_zoneid;
2487 /* Map ixa to ira including IPsec policies. */
2488 ipsec_out_to_in(ixa, ill, &iras);
2509 dzone = ixa->ixa_ire->ire_zoneid;
2510 szone = ixa->ixa_zoneid;
2551 /* Map ixa to ira including IPsec policies. */
2552 ipsec_out_to_in(ixa, ill, &iras);