Lines Matching refs:ixa
104 ip_output_simple_v6(mblk_t *mp, ip_xmit_attr_t *ixa)
115 iaflags_t ixaflags = ixa->ixa_flags;
116 ip_stack_t *ipst = ixa->ixa_ipst;
126 ASSERT(ixa->ixa_nce == NULL);
128 ixa->ixa_pktlen = ntohs(ip6h->ip6_plen) + IPV6_HDR_LEN;
129 ASSERT(ixa->ixa_pktlen == msgdsize(mp));
130 if (!ip_hdr_length_nexthdr_v6(mp, ip6h, &ixa->ixa_ip_hdr_length,
139 ixa->ixa_protocol = *nexthdrp;
153 ire = ip_select_route_v6(&firsthop, ip6h->ip6_src, ixa, NULL, &setsrc,
168 ixa->ixa_fragsize = IP_MAXPACKET;
172 error = (ire->ire_sendfn)(ire, mp, ip6h, ixa,
215 ixa->ixa_postfragfn = ip_postfrag_multirt_v6;
216 ixa->ixa_flags |= IXAF_MULTIRT_MULTICAST;
218 ixa->ixa_postfragfn = ire->ire_postfragfn;
219 ixa->ixa_flags &= ~IXAF_MULTIRT_MULTICAST;
221 ASSERT(ixa->ixa_nce == NULL);
222 ixa->ixa_nce = nce;
235 ixa->ixa_fragsize = IPV6_MIN_MTU;
252 ixa->ixa_fragsize = ip_get_base_mtu(nce->nce_ill, ire);
259 ixa->ixa_fragsize = fragsize;
262 ixa->ixa_fragsize = ip_get_base_mtu(nce->nce_ill, ire);
285 ixa->ixa_zoneid, ipst, B_FALSE,
286 ixa->ixa_src_preferences, &src, NULL, NULL);
299 if (!ip_verify_src(mp, ixa, NULL)) {
316 ASSERT(ixa->ixa_ipsec_policy == NULL);
317 mp = ip_output_attach_policy(mp, NULL, ip6h, NULL, ixa);
347 error = (ire->ire_sendfn)(ire, mp, ip6h, ixa, &dce->dce_ident);
354 if (ixa->ixa_nce != NULL)
355 nce_refrele(ixa->ixa_nce);
356 ixa->ixa_nce = NULL;
378 ip_xmit_attr_t *ixa, uint32_t *identp)
381 ip_stack_t *ipst = ixa->ixa_ipst;
384 uint_t pktlen = ixa->ixa_pktlen;
442 szone = ixa->ixa_zoneid;
457 if (ixa->ixa_protocol == IPPROTO_ICMPV6) {
460 icmp6 = (icmp6_t *)((uchar_t *)ip6h + ixa->ixa_ip_hdr_length);
493 /* Map ixa to ira including IPsec policies */
494 ipsec_out_to_in(ixa, ill, &iras);
527 /* We moved any IPsec refs from ixa to iras */
533 multirt_check_v6(ire_t *ire, ip6_t *ip6h, ip_xmit_attr_t *ixa)
535 ip_stack_t *ipst = ixa->ixa_ipst;
544 ixa->ixa_flags |= IXAF_NO_TTL_CHANGE;
552 ixa->ixa_flags |= IXAF_NO_TTL_CHANGE;
556 ixa->ixa_flags |= IXAF_IPV6_ADD_FRAGHDR;
568 ip_xmit_attr_t *ixa, uint32_t *identp)
571 ip_stack_t *ipst = ixa->ixa_ipst;
573 iaflags_t ixaflags = ixa->ixa_flags;
580 multirt_check_v6(ire, ip6h, ixa);
605 ixa->ixa_flags &= ~(IXAF_LOOPBACK_COPY | IXAF_NO_HW_CKSUM);
608 ixa->ixa_flags |= IXAF_LOOPBACK_COPY | IXAF_NO_HW_CKSUM;
615 ixa->ixa_flags |= IXAF_LOOPBACK_COPY | IXAF_NO_HW_CKSUM;
622 ixa->ixa_zoneid)) {
623 ixa->ixa_flags |= IXAF_NO_LOOP_ZONEID_SET;
624 ixa->ixa_no_loop_zoneid = ixa->ixa_zoneid;
625 ixa->ixa_flags |= IXAF_LOOPBACK_COPY | IXAF_NO_HW_CKSUM;
634 ip6h->ip6_hops = ixa->ixa_multicast_ttl;
637 return (ire_send_wire_v6(ire, mp, ip6h, ixa, identp));
645 ip_xmit_attr_t *ixa, uint32_t *identp)
649 multirt_check_v6(ire, ip6h, ixa);
652 return (ire_send_multicast_v6(ire, mp, ip6h, ixa, identp));
654 return (ire_send_wire_v6(ire, mp, ip6h, ixa, identp));
663 ip_xmit_attr_t *ixa, uint32_t *identp)
666 ip_stack_t *ipst = ixa->ixa_ipst;
693 !(ixa->ixa_flags & IRAF_IS_IPV4), &dummy, ipst);
700 /* Map ixa to ira including IPsec policies */
701 ipsec_out_to_in(ixa, ill, &iras);
704 /* We moved any IPsec refs from ixa to iras */
718 ip_output_sw_cksum_v6(mblk_t *mp, ip6_t *ip6h, ip_xmit_attr_t *ixa)
720 ip_stack_t *ipst = ixa->ixa_ipst;
721 uint_t pktlen = ixa->ixa_pktlen;
724 uint8_t protocol = ixa->ixa_protocol;
725 uint16_t ip_hdr_length = ixa->ixa_ip_hdr_length;
756 } else if (ixa->ixa_flags & IXAF_SET_RAW_CKSUM) {
762 ixa->ixa_raw_cksum_offset);
818 ip_xmit_attr_t *ixa, ill_t *ill)
820 uint_t pktlen = ixa->ixa_pktlen;
824 uint8_t protocol = ixa->ixa_protocol;
825 uint16_t ip_hdr_length = ixa->ixa_ip_hdr_length;
831 return (ip_output_sw_cksum_v6(mp, ip6h, ixa));
859 } else if (ixa->ixa_flags & IXAF_SET_RAW_CKSUM) {
865 ixa->ixa_raw_cksum_offset);
929 return (ip_output_sw_cksum_v6(mp, ip6h, ixa));
945 ip_xmit_attr_t *ixa, uint32_t *identp)
947 ip_stack_t *ipst = ixa->ixa_ipst;
949 iaflags_t ixaflags = ixa->ixa_flags;
951 uint32_t pktlen = ixa->ixa_pktlen;
953 ASSERT(ixa->ixa_nce != NULL);
954 ill = ixa->ixa_nce->nce_ill;
963 if (ixa->ixa_protocol == IPPROTO_ICMPV6) {
966 icmp6 = (icmp6_t *)((uchar_t *)ip6h + ixa->ixa_ip_hdr_length);
967 icmp_update_out_mib_v6(ixa->ixa_nce->nce_common->ncec_ill,
991 if (is_system_labeled() && ixa->ixa_tsl != NULL &&
996 newcr = copycred_from_tslabel(ixa->ixa_cred, ixa->ixa_tsl,
1014 if (pktlen > ixa->ixa_fragsize ||
1019 pktlen += ipsec_out_extra_length(ixa);
1028 if (!ip_output_sw_cksum_v6(mp, ip6h, ixa)) {
1044 pktlen > ixa->ixa_fragsize) {
1052 if ((pktlen > ixa->ixa_fragsize) &&
1058 uint_t, pktlen, uint_t, ixa->ixa_fragsize,
1059 uint_t, ixa->ixa_pktlen,
1060 uint_t, ixa->ixa_pmtu);
1063 /* Map ixa to ira including IPsec policies */
1064 ipsec_out_to_in(ixa, ill, &iras);
1067 icmp_pkt2big_v6(mp, ixa->ixa_fragsize, B_TRUE,
1069 /* We moved any IPsec refs from ixa to iras */
1074 uint_t, ixa->ixa_fragsize, uint_t, ixa->ixa_pktlen,
1075 uint_t, ixa->ixa_pmtu);
1087 ident = atomic_add_32_nv(identp, ixa->ixa_extra_ident +
1089 ixa->ixa_ident = ident; /* In case we do IPsec */
1097 return (ipsec_out_process(mp, ixa));
1100 mp = ip_fraghdr_add_v6(mp, ident, ixa);
1105 ASSERT(pktlen == ixa->ixa_pktlen);
1108 if (pktlen > ixa->ixa_fragsize) {
1109 return (ip_fragment_v6(mp, ixa->ixa_nce, ixaflags,
1110 pktlen, ixa->ixa_fragsize,
1111 ixa->ixa_xmit_hint, ixa->ixa_zoneid,
1112 ixa->ixa_no_loop_zoneid, ixa->ixa_postfragfn,
1113 &ixa->ixa_cookie));
1119 if (!ip_output_cksum_v6(ixaflags, mp, ip6h, ixa, ill)) {
1126 return ((ixa->ixa_postfragfn)(mp, ixa->ixa_nce, ixaflags,
1127 pktlen, ixa->ixa_xmit_hint, ixa->ixa_zoneid,
1128 ixa->ixa_no_loop_zoneid, &ixa->ixa_cookie));