Lines Matching refs:opt

173 static int ip6_setpktopt(int optname, u_char *buf, int len, struct ip6_pktopts *opt, int sticky, int cmsg, int uproto);
230 struct ip6_pktopts *opt,
248 error = ip6_output(m, opt, ro, flags, im6o, ifpp, ip6oap);
265 * The mbuf opt, if present, will not be freed.
274 struct ip6_pktopts *opt,
427 if (opt) {
429 MAKE_EXTHDR(opt->ip6po_hbh, &exthdrs.ip6e_hbh);
431 if (opt->ip6po_rthdr) {
442 MAKE_EXTHDR(opt->ip6po_dest1, &exthdrs.ip6e_dest1);
445 MAKE_EXTHDR(opt->ip6po_rthdr, &exthdrs.ip6e_rthdr);
447 MAKE_EXTHDR(opt->ip6po_dest2, &exthdrs.ip6e_dest2);
794 if (opt && opt->ip6po_rthdr)
795 ro = &opt->ip6po_route;
805 if (opt && opt->ip6po_tclass >= 0) {
813 ip6->ip6_flow |= htonl((opt->ip6po_tclass & mask) << 20);
817 if (opt && opt->ip6po_hlim != -1)
818 ip6->ip6_hlim = opt->ip6po_hlim & 0xff;
909 if (opt != NULL && opt->ip6po_pktinfo != NULL) {
910 if (opt->ip6po_pktinfo->ipi6_ifindex != IFSCOPE_NONE)
911 opt->ip6po_pktinfo->ipi6_ifindex = IFSCOPE_NONE;
942 &dst_sa, opt, im6o, ro, &ifp, &rt, 0, &ip6oa)) != 0) {
1031 if (opt && opt->ip6po_nextroute.ro_rt) {
1037 dst = (struct sockaddr_in6 *)(void *)opt->ip6po_nexthop;
1158 else if (opt && opt->ip6po_minmtu == IP6PO_MINMTU_ALL)
1161 (opt == NULL ||
1162 opt->ip6po_minmtu != IP6PO_MINMTU_DISABLE)) {
1232 * TBD: Need to save opt->ip6po_flags for reinjection rdar://10434993
1291 if (opt && (opt->ip6po_flags & IP6PO_DONTFRAG))
2610 struct ip6_pktopts *opt = *pktopt;
2614 if (opt) {
2616 if (opt->ip6po_pktinfo || opt->ip6po_nexthop ||
2617 opt->ip6po_hbh || opt->ip6po_dest1 || opt->ip6po_dest2 ||
2618 opt->ip6po_rhinfo.ip6po_rhi_rthdr)
2621 ip6_clearpktopts(opt, -1);
2623 opt = _MALLOC(sizeof(*opt), M_IP6OPT, M_WAITOK);
2624 if (opt == NULL)
2632 * whether the opt is just created or given.
2634 if (opt)
2635 FREE(opt, M_IP6OPT);
2640 if ((error = ip6_setpktopts(m, opt, NULL, so->so_proto->pr_protocol)) != 0) {
2641 ip6_clearpktopts(opt, -1); /* XXX: discard all options */
2642 FREE(opt, M_IP6OPT);
2645 *pktopt = opt;
2654 ip6_initpktopts(struct ip6_pktopts *opt)
2657 bzero(opt, sizeof(*opt));
2658 opt->ip6po_hlim = -1; /* -1 means default hop limit */
2659 opt->ip6po_tclass = -1; /* -1 means default traffic class */
2660 opt->ip6po_minmtu = IP6PO_MINMTU_MCASTONLY;
2661 opt->ip6po_prefer_tempaddr = IP6PO_TEMPADDR_SYSTEM;
2668 struct ip6_pktopts *opt;
2670 opt = *pktopt;
2671 if (opt == NULL) {
2672 opt = _MALLOC(sizeof(*opt), M_IP6OPT, M_WAITOK);
2673 if (opt == NULL)
2675 ip6_initpktopts(opt);
2676 *pktopt = opt;
2679 return (ip6_setpktopt(optname, buf, len, opt, 1, 0, uproto));
3050 ip6_setpktopts(struct mbuf *control, struct ip6_pktopts *opt,
3055 if (control == NULL || opt == NULL)
3058 ip6_initpktopts(opt);
3071 if ((error = copypktopts(opt, stickyopt, M_NOWAIT)) != 0)
3094 cm->cmsg_len - CMSG_LEN(0), opt, 0, 1, uproto);
3111 ip6_setpktopt(int optname, u_char *buf, int len, struct ip6_pktopts *opt,
3182 if (optname == IPV6_PKTINFO && opt->ip6po_pktinfo &&
3185 ip6_clearpktopts(opt, optname);
3222 if (opt->ip6po_pktinfo == NULL) {
3223 opt->ip6po_pktinfo = _MALLOC(sizeof(*pktinfo),
3225 if (opt->ip6po_pktinfo == NULL)
3228 bcopy(pktinfo, opt->ip6po_pktinfo, sizeof(*pktinfo));
3250 opt->ip6po_hlim = *hlimp;
3264 opt->ip6po_tclass = tclass;
3275 ip6_clearpktopts(opt, IPV6_NEXTHOP);
3308 ip6_clearpktopts(opt, IPV6_NEXTHOP);
3309 opt->ip6po_nexthop = _MALLOC(*buf, M_IP6OPT, M_NOWAIT);
3310 if (opt->ip6po_nexthop == NULL)
3312 bcopy(buf, opt->ip6po_nexthop, *buf);
3331 ip6_clearpktopts(opt, IPV6_HOPOPTS);
3344 ip6_clearpktopts(opt, IPV6_HOPOPTS);
3345 opt->ip6po_hbh = _MALLOC(hbhlen, M_IP6OPT, M_NOWAIT);
3346 if (opt->ip6po_hbh == NULL)
3348 bcopy(hbh, opt->ip6po_hbh, hbhlen);
3365 ip6_clearpktopts(opt, optname);
3395 if (opt->ip6po_rthdr == NULL)
3396 newdest = &opt->ip6po_dest1;
3398 newdest = &opt->ip6po_dest2;
3401 newdest = &opt->ip6po_dest1;
3404 newdest = &opt->ip6po_dest2;
3409 ip6_clearpktopts(opt, optname);
3425 ip6_clearpktopts(opt, IPV6_RTHDR);
3451 ip6_clearpktopts(opt, IPV6_RTHDR);
3452 opt->ip6po_rthdr = _MALLOC(rthlen, M_IP6OPT, M_NOWAIT);
3453 if (opt->ip6po_rthdr == NULL)
3455 bcopy(rth, opt->ip6po_rthdr, rthlen);
3469 opt->ip6po_minmtu = minmtupolicy;
3481 opt->ip6po_flags &= ~IP6PO_DONTFRAG;
3483 opt->ip6po_flags |= IP6PO_DONTFRAG;
3495 opt->ip6po_prefer_tempaddr = preftemp;