Lines Matching refs:ms

180 mesh_rt_find_locked(struct ieee80211_mesh_state *ms,  in mesh_rt_find_locked()  argument
185 MESH_RT_LOCK_ASSERT(ms); in mesh_rt_find_locked()
187 TAILQ_FOREACH(rt, &ms->ms_routes, rt_next) { in mesh_rt_find_locked()
198 struct ieee80211_mesh_state *ms = vap->iv_mesh; in mesh_rt_add_locked() local
204 MESH_RT_LOCK_ASSERT(ms); in mesh_rt_add_locked()
208 ms->ms_ppath->mpp_privlen, M_80211_MESH_RT, M_INTWAIT | M_ZERO); in mesh_rt_add_locked()
211 ms->ms_ppath->mpp_privlen, M_80211_MESH_RT, in mesh_rt_add_locked()
225 TAILQ_INSERT_TAIL(&ms->ms_routes, rt, rt_next); in mesh_rt_add_locked()
234 struct ieee80211_mesh_state *ms = vap->iv_mesh; in ieee80211_mesh_rt_find() local
237 MESH_RT_LOCK(ms); in ieee80211_mesh_rt_find()
238 rt = mesh_rt_find_locked(ms, dest); in ieee80211_mesh_rt_find()
239 MESH_RT_UNLOCK(ms); in ieee80211_mesh_rt_find()
247 struct ieee80211_mesh_state *ms = vap->iv_mesh; in ieee80211_mesh_rt_add() local
255 MESH_RT_LOCK(ms); in ieee80211_mesh_rt_add()
257 MESH_RT_UNLOCK(ms); in ieee80211_mesh_rt_add()
312 struct ieee80211_mesh_state *ms = vap->iv_mesh; in ieee80211_mesh_proxy_check() local
315 MESH_RT_LOCK(ms); in ieee80211_mesh_proxy_check()
316 rt = mesh_rt_find_locked(ms, dest); in ieee80211_mesh_proxy_check()
351 MESH_RT_UNLOCK(ms); in ieee80211_mesh_proxy_check()
355 mesh_rt_del(struct ieee80211_mesh_state *ms, struct ieee80211_mesh_route *rt) in mesh_rt_del() argument
357 TAILQ_REMOVE(&ms->ms_routes, rt, rt_next); in mesh_rt_del()
372 struct ieee80211_mesh_state *ms = vap->iv_mesh; in ieee80211_mesh_rt_del() local
375 MESH_RT_LOCK(ms); in ieee80211_mesh_rt_del()
376 TAILQ_FOREACH_SAFE(rt, &ms->ms_routes, rt_next, next) { in ieee80211_mesh_rt_del()
379 ms->ms_ppath->mpp_senderror(vap, dest, rt, in ieee80211_mesh_rt_del()
382 ms->ms_ppath->mpp_senderror(vap, dest, rt, in ieee80211_mesh_rt_del()
385 mesh_rt_del(ms, rt); in ieee80211_mesh_rt_del()
386 MESH_RT_UNLOCK(ms); in ieee80211_mesh_rt_del()
390 MESH_RT_UNLOCK(ms); in ieee80211_mesh_rt_del()
396 struct ieee80211_mesh_state *ms = vap->iv_mesh; in ieee80211_mesh_rt_flush() local
399 if (ms == NULL) in ieee80211_mesh_rt_flush()
401 MESH_RT_LOCK(ms); in ieee80211_mesh_rt_flush()
402 TAILQ_FOREACH_SAFE(rt, &ms->ms_routes, rt_next, next) in ieee80211_mesh_rt_flush()
403 mesh_rt_del(ms, rt); in ieee80211_mesh_rt_flush()
404 MESH_RT_UNLOCK(ms); in ieee80211_mesh_rt_flush()
411 struct ieee80211_mesh_state *ms = vap->iv_mesh; in ieee80211_mesh_rt_flush_peer() local
414 MESH_RT_LOCK(ms); in ieee80211_mesh_rt_flush_peer()
415 TAILQ_FOREACH_SAFE(rt, &ms->ms_routes, rt_next, next) { in ieee80211_mesh_rt_flush_peer()
417 mesh_rt_del(ms, rt); in ieee80211_mesh_rt_flush_peer()
419 MESH_RT_UNLOCK(ms); in ieee80211_mesh_rt_flush_peer()
429 struct ieee80211_mesh_state *ms = vap->iv_mesh; in mesh_rt_flush_invalid() local
432 if (ms == NULL) in mesh_rt_flush_invalid()
434 MESH_RT_LOCK(ms); in mesh_rt_flush_invalid()
435 TAILQ_FOREACH_SAFE(rt, &ms->ms_routes, rt_next, next) { in mesh_rt_flush_invalid()
441 mesh_rt_del(ms, rt); in mesh_rt_flush_invalid()
443 MESH_RT_UNLOCK(ms); in mesh_rt_flush_invalid()
488 struct ieee80211_mesh_state *ms = vap->iv_mesh; in mesh_select_proto_path() local
493 ms->ms_ppath = &mesh_proto_paths[i]; in mesh_select_proto_path()
503 struct ieee80211_mesh_state *ms = vap->iv_mesh; in mesh_select_proto_metric() local
508 ms->ms_pmetric = &mesh_proto_metrics[i]; in mesh_select_proto_metric()
518 struct ieee80211_mesh_state *ms = vap->iv_mesh; in mesh_gatemode_setup() local
526 if (ms->ms_flags & IEEE80211_MESHFLAGS_ROOT || in mesh_gatemode_setup()
527 (ms->ms_flags & IEEE80211_MESHFLAGS_GATE) == 0) { in mesh_gatemode_setup()
528 callout_drain(&ms->ms_gatetimer); in mesh_gatemode_setup()
531 callout_reset(&ms->ms_gatetimer, ieee80211_mesh_gateint, in mesh_gatemode_setup()
539 struct ieee80211_mesh_state *ms = vap->iv_mesh; in mesh_gatemode_cb() local
544 gann.gann_ttl = ms->ms_ttl; in mesh_gatemode_cb()
546 gann.gann_seq = ms->ms_gateseq++; in mesh_gatemode_cb()
649 struct ieee80211_mesh_state *ms = vap->iv_mesh; in mesh_vdetach() local
651 callout_drain(&ms->ms_cleantimer); in mesh_vdetach()
655 MESH_RT_LOCK_DESTROY(ms); in mesh_vdetach()
656 ms->ms_ppath->mpp_vdetach(vap); in mesh_vdetach()
664 struct ieee80211_mesh_state *ms; in mesh_vattach() local
671 ms = kmalloc(sizeof(struct ieee80211_mesh_state), M_80211_VAP, in mesh_vattach()
674 ms = IEEE80211_MALLOC(sizeof(struct ieee80211_mesh_state), M_80211_VAP, in mesh_vattach()
677 if (ms == NULL) { in mesh_vattach()
681 vap->iv_mesh = ms; in mesh_vattach()
682 ms->ms_seq = 0; in mesh_vattach()
683 ms->ms_flags = (IEEE80211_MESHFLAGS_AP | IEEE80211_MESHFLAGS_FWD); in mesh_vattach()
684 ms->ms_ttl = IEEE80211_MESH_DEFAULT_TTL; in mesh_vattach()
685 TAILQ_INIT(&ms->ms_known_gates); in mesh_vattach()
686 TAILQ_INIT(&ms->ms_routes); in mesh_vattach()
687 MESH_RT_LOCK_INIT(ms, "MBSS"); in mesh_vattach()
689 callout_init_mp(&ms->ms_cleantimer); in mesh_vattach()
690 callout_init_mp(&ms->ms_gatetimer); in mesh_vattach()
692 callout_init(&ms->ms_cleantimer, 1); in mesh_vattach()
693 callout_init(&ms->ms_gatetimer, 1); in mesh_vattach()
695 ms->ms_gateseq = 0; in mesh_vattach()
697 KASSERT(ms->ms_pmetric, ("ms_pmetric == NULL")); in mesh_vattach()
699 KASSERT(ms->ms_ppath, ("ms_ppath == NULL")); in mesh_vattach()
700 ms->ms_ppath->mpp_vattach(vap); in mesh_vattach()
709 struct ieee80211_mesh_state *ms = vap->iv_mesh; in mesh_newstate() local
725 callout_drain(&ms->ms_cleantimer); in mesh_newstate()
726 callout_drain(&ms->ms_gatetimer); in mesh_newstate()
755 ms->ms_idlen != 0) { in mesh_newstate()
850 callout_reset(&ms->ms_cleantimer, ms->ms_ppath->mpp_inact, in mesh_newstate()
858 ms->ms_ppath->mpp_newstate(vap, ostate, arg); in mesh_newstate()
866 struct ieee80211_mesh_state *ms = vap->iv_mesh; in mesh_rt_cleanup_cb() local
869 callout_reset(&ms->ms_cleantimer, ms->ms_ppath->mpp_inact, in mesh_rt_cleanup_cb()
882 struct ieee80211_mesh_state *ms = vap->iv_mesh; in ieee80211_mesh_mark_gate() local
886 MESH_RT_LOCK(ms); in ieee80211_mesh_mark_gate()
887 TAILQ_FOREACH_SAFE(gr, &ms->ms_known_gates, gr_next, next) { in ieee80211_mesh_mark_gate()
907 TAILQ_INSERT_TAIL(&ms->ms_known_gates, gr, gr_next); in ieee80211_mesh_mark_gate()
911 MESH_RT_UNLOCK(ms); in ieee80211_mesh_mark_gate()
924 struct ieee80211_mesh_state *ms = vap->iv_mesh; in mesh_linkchange() local
942 KASSERT(ms->ms_neighbors < 65535, ("neighbor count overflow")); in mesh_linkchange()
943 ms->ms_neighbors++; in mesh_linkchange()
947 KASSERT(ms->ms_neighbors > 0, ("neighbor count 0")); in mesh_linkchange()
948 ms->ms_neighbors--; in mesh_linkchange()
954 ms->ms_ppath->mpp_peerdown(ni); in mesh_linkchange()
1094 struct ieee80211_mesh_state *ms = vap->iv_mesh; in ieee80211_mesh_forward_to_gates() local
1105 MESH_RT_LOCK(ms); in ieee80211_mesh_forward_to_gates()
1111 TAILQ_FOREACH_SAFE(gr, &ms->ms_known_gates, gr_next, gr_next) { in ieee80211_mesh_forward_to_gates()
1145 ieee80211_mesh_rt_update(rt_dest, ms->ms_ppath->mpp_inact); in ieee80211_mesh_forward_to_gates()
1146 MESH_RT_UNLOCK(ms); in ieee80211_mesh_forward_to_gates()
1158 MESH_RT_LOCK(ms); in ieee80211_mesh_forward_to_gates()
1162 MESH_RT_UNLOCK(ms); in ieee80211_mesh_forward_to_gates()
1174 struct ieee80211_mesh_state *ms = vap->iv_mesh; in mesh_forward() local
1198 if (!(ms->ms_flags & IEEE80211_MESHFLAGS_FWD)) { in mesh_forward()
1242 ms->ms_ppath->mpp_senderror(vap, whcopy->i_addr3, NULL, in mesh_forward()
1402 struct ieee80211_mesh_state *ms = vap->iv_mesh; in mesh_recv_indiv_data_to_fwrd() local
1438 ms->ms_ppath->mpp_inact)); in mesh_recv_indiv_data_to_fwrd()
1444 ms->ms_ppath->mpp_inact)); in mesh_recv_indiv_data_to_fwrd()
1465 struct ieee80211_mesh_state *ms = vap->iv_mesh; in mesh_recv_indiv_data_to_me() local
1484 ieee80211_mesh_rt_update(rt, ticks_to_msecs(ms->ms_ppath->mpp_inact)); in mesh_recv_indiv_data_to_me()
1539 struct ieee80211_mesh_state *ms = vap->iv_mesh; in mesh_recv_group_data() local
1554 if (ms->ms_flags & IEEE80211_MESHFLAGS_GATE && in mesh_recv_group_data()
1555 ms->ms_flags & IEEE80211_MESHFLAGS_FWD) in mesh_recv_group_data()
1879 struct ieee80211_mesh_state *ms = vap->iv_mesh; in mesh_recv_mgmt() local
1952 if (memcmp(scan.meshid+2, ms->ms_id, ms->ms_idlen) != 0 || in mesh_recv_mgmt()
1981 (ms->ms_flags & IEEE80211_MESHFLAGS_AP)) { in mesh_recv_mgmt()
2013 ms->ms_ppath->mpp_inact)); in mesh_recv_mgmt()
2288 struct ieee80211_mesh_state *ms = vap->iv_mesh; in mesh_recv_action_meshpeering_open() local
2307 if (ms->ms_neighbors >= IEEE80211_MESH_MAX_NEIGHBORS) { in mesh_recv_action_meshpeering_open()
2613 struct ieee80211_mesh_state *ms = vap->iv_mesh; in mesh_recv_action_meshgate() local
2643 if (ms == NULL) in mesh_recv_action_meshgate()
2645 MESH_RT_LOCK(ms); in mesh_recv_action_meshgate()
2646 TAILQ_FOREACH_SAFE(gr, &ms->ms_known_gates, gr_next, next) { in mesh_recv_action_meshgate()
2654 MESH_RT_UNLOCK(ms); in mesh_recv_action_meshgate()
2675 TAILQ_INSERT_TAIL(&ms->ms_known_gates, gr, gr_next); in mesh_recv_action_meshgate()
2680 rt_gate = mesh_rt_find_locked(ms, gr->gr_addr); in mesh_recv_action_meshgate()
2687 MESH_RT_UNLOCK(ms); in mesh_recv_action_meshgate()
2690 if ((ie.gann_ttl - 1) < 1 && !(ms->ms_flags & IEEE80211_MESHFLAGS_FWD)) in mesh_recv_action_meshgate()
3148 struct ieee80211_mesh_state *ms = vap->iv_mesh; in mesh_verify_meshid() local
3150 if (ie == NULL || ie[1] != ms->ms_idlen) in mesh_verify_meshid()
3152 return memcmp(ms->ms_id, ie + 2, ms->ms_idlen); in mesh_verify_meshid()
3163 const struct ieee80211_mesh_state *ms = vap->iv_mesh; in mesh_verify_meshconf() local
3167 if (meshconf->conf_pselid != ms->ms_ppath->mpp_ie) { in mesh_verify_meshconf()
3173 if (meshconf->conf_pmetid != ms->ms_pmetric->mpm_ie) { in mesh_verify_meshconf()
3252 struct ieee80211_mesh_state *ms = vap->iv_mesh; in ieee80211_add_meshid() local
3257 *frm++ = ms->ms_idlen; in ieee80211_add_meshid()
3258 memcpy(frm, ms->ms_id, ms->ms_idlen); in ieee80211_add_meshid()
3259 return frm + ms->ms_idlen; in ieee80211_add_meshid()
3270 const struct ieee80211_mesh_state *ms = vap->iv_mesh; in ieee80211_add_meshconf() local
3277 *frm++ = ms->ms_ppath->mpp_ie; /* path selection */ in ieee80211_add_meshconf()
3278 *frm++ = ms->ms_pmetric->mpm_ie; /* link metric */ in ieee80211_add_meshconf()
3283 *frm = (ms->ms_neighbors > IEEE80211_MESH_MAX_NEIGHBORS ? in ieee80211_add_meshconf()
3284 IEEE80211_MESH_MAX_NEIGHBORS : ms->ms_neighbors) << 1; in ieee80211_add_meshconf()
3285 if (ms->ms_flags & IEEE80211_MESHFLAGS_GATE) in ieee80211_add_meshconf()
3289 if (ms->ms_flags & IEEE80211_MESHFLAGS_AP) in ieee80211_add_meshconf()
3291 if (ms->ms_flags & IEEE80211_MESHFLAGS_FWD) in ieee80211_add_meshconf()
3447 struct ieee80211_mesh_state *ms = vap->iv_mesh; in ieee80211_mesh_node_cleanup() local
3453 ms->ms_ppath->mpp_peerdown(ni); in ieee80211_mesh_node_cleanup()
3489 struct ieee80211_mesh_state *ms = vap->iv_mesh; in mesh_ioctl_get80211() local
3503 ireq->i_len = ms->ms_idlen; in mesh_ioctl_get80211()
3504 memcpy(tmpmeshid, ms->ms_id, ireq->i_len); in mesh_ioctl_get80211()
3508 ireq->i_val = (ms->ms_flags & IEEE80211_MESHFLAGS_AP) != 0; in mesh_ioctl_get80211()
3511 ireq->i_val = (ms->ms_flags & IEEE80211_MESHFLAGS_FWD) != 0; in mesh_ioctl_get80211()
3514 ireq->i_val = (ms->ms_flags & IEEE80211_MESHFLAGS_GATE) != 0; in mesh_ioctl_get80211()
3517 ireq->i_val = ms->ms_ttl; in mesh_ioctl_get80211()
3523 MESH_RT_LOCK(ms); in mesh_ioctl_get80211()
3524 TAILQ_FOREACH(rt, &ms->ms_routes, rt_next) { in mesh_ioctl_get80211()
3527 MESH_RT_UNLOCK(ms); in mesh_ioctl_get80211()
3543 MESH_RT_LOCK(ms); in mesh_ioctl_get80211()
3544 TAILQ_FOREACH(rt, &ms->ms_routes, rt_next) { in mesh_ioctl_get80211()
3561 MESH_RT_UNLOCK(ms); in mesh_ioctl_get80211()
3575 len = strlen(ms->ms_pmetric->mpm_descr); in mesh_ioctl_get80211()
3579 error = copyout(ms->ms_pmetric->mpm_descr, in mesh_ioctl_get80211()
3583 len = strlen(ms->ms_ppath->mpp_descr); in mesh_ioctl_get80211()
3587 error = copyout(ms->ms_ppath->mpp_descr, in mesh_ioctl_get80211()
3601 struct ieee80211_mesh_state *ms = vap->iv_mesh; in mesh_ioctl_set80211() local
3618 memset(ms->ms_id, 0, IEEE80211_NWID_LEN); in mesh_ioctl_set80211()
3619 ms->ms_idlen = ireq->i_len; in mesh_ioctl_set80211()
3620 memcpy(ms->ms_id, tmpmeshid, ireq->i_len); in mesh_ioctl_set80211()
3625 ms->ms_flags |= IEEE80211_MESHFLAGS_AP; in mesh_ioctl_set80211()
3627 ms->ms_flags &= ~IEEE80211_MESHFLAGS_AP; in mesh_ioctl_set80211()
3632 ms->ms_flags |= IEEE80211_MESHFLAGS_FWD; in mesh_ioctl_set80211()
3634 ms->ms_flags &= ~IEEE80211_MESHFLAGS_FWD; in mesh_ioctl_set80211()
3639 ms->ms_flags |= IEEE80211_MESHFLAGS_GATE; in mesh_ioctl_set80211()
3641 ms->ms_flags &= ~IEEE80211_MESHFLAGS_GATE; in mesh_ioctl_set80211()
3644 ms->ms_ttl = (uint8_t) ireq->i_val; in mesh_ioctl_set80211()