Lines Matching defs:im6o

189 	struct ip6_moptions	im6o;			/* ip6_moptions */
233 struct ip6_moptions *im6o,
248 error = ip6_output(m, opt, ro, flags, im6o, ifpp, ip6oap);
277 struct ip6_moptions *im6o,
622 if (im6o != NULL && IN6_IS_ADDR_MULTICAST(&ip6->ip6_dst)) {
624 IM6O_LOCK(im6o);
625 ippo->ippo_mcast_ifnet = im6o->im6o_multicast_ifp;
626 ippo->ippo_mcast_ttl = im6o->im6o_multicast_hlim;
627 ippo->ippo_mcast_loop = im6o->im6o_multicast_loop;
628 IM6O_UNLOCK(im6o);
820 if (im6o != NULL) {
821 IM6O_LOCK(im6o);
822 ip6->ip6_hlim = im6o->im6o_multicast_hlim;
823 IM6O_UNLOCK(im6o);
942 &dst_sa, opt, im6o, ro, &ifp, &rt, 0, &ip6oa)) != 0) {
1064 if (im6o != NULL)
1065 IM6O_LOCK(im6o);
1067 (im6o == NULL || im6o->im6o_multicast_loop)) {
1068 if (im6o != NULL)
1069 IM6O_UNLOCK(im6o);
1077 if (im6o != NULL)
1078 IM6O_UNLOCK(im6o);
2929 im6o_addref(struct ip6_moptions *im6o, int locked)
2932 IM6O_LOCK(im6o);
2934 IM6O_LOCK_ASSERT_HELD(im6o);
2936 if (++im6o->im6o_refcnt == 0) {
2937 panic("%s: im6o %p wraparound refcnt\n", __func__, im6o);
2939 } else if (im6o->im6o_trace != NULL) {
2940 (*im6o->im6o_trace)(im6o, TRUE);
2944 IM6O_UNLOCK(im6o);
2948 im6o_remref(struct ip6_moptions *im6o)
2952 IM6O_LOCK(im6o);
2953 if (im6o->im6o_refcnt == 0) {
2954 panic("%s: im6o %p negative refcnt", __func__, im6o);
2956 } else if (im6o->im6o_trace != NULL) {
2957 (*im6o->im6o_trace)(im6o, FALSE);
2960 --im6o->im6o_refcnt;
2961 if (im6o->im6o_refcnt > 0) {
2962 IM6O_UNLOCK(im6o);
2966 for (i = 0; i < im6o->im6o_num_memberships; ++i) {
2969 imf = im6o->im6o_mfilters ? &im6o->im6o_mfilters[i] : NULL;
2973 (void) in6_mc_leave(im6o->im6o_membership[i], imf);
2978 IN6M_REMREF(im6o->im6o_membership[i]);
2979 im6o->im6o_membership[i] = NULL;
2981 im6o->im6o_num_memberships = 0;
2982 if (im6o->im6o_mfilters != NULL) {
2983 FREE(im6o->im6o_mfilters, M_IN6MFILTER);
2984 im6o->im6o_mfilters = NULL;
2986 if (im6o->im6o_membership != NULL) {
2987 FREE(im6o->im6o_membership, M_IP6MOPTS);
2988 im6o->im6o_membership = NULL;
2990 IM6O_UNLOCK(im6o);
2992 lck_mtx_destroy(&im6o->im6o_lock, ifa_mtx_grp);
2994 if (!(im6o->im6o_debug & IFD_ALLOC)) {
2995 panic("%s: im6o %p cannot be freed", __func__, im6o);
2998 zfree(im6o_zone, im6o);
3002 im6o_trace(struct ip6_moptions *im6o, int refhold)
3004 struct ip6_moptions_dbg *im6o_dbg = (struct ip6_moptions_dbg *)im6o;
3009 if (!(im6o->im6o_debug & IFD_DEBUG)) {
3010 panic("%s: im6o %p has no debug structure", __func__, im6o);
3028 struct ip6_moptions *im6o;
3030 im6o = (how == M_WAITOK) ?
3032 if (im6o != NULL) {
3033 bzero(im6o, im6o_size);
3034 lck_mtx_init(&im6o->im6o_lock, ifa_mtx_grp, ifa_mtx_attr);
3035 im6o->im6o_debug |= IFD_ALLOC;
3037 im6o->im6o_debug |= IFD_DEBUG;
3038 im6o->im6o_trace = im6o_trace;
3040 IM6O_ADDREF(im6o);
3043 return (im6o);