Lines Matching defs:ms

110     "mesh gate interval (ms)");
167 #define MESH_RT_LOCK(ms) mtx_lock(&(ms)->ms_rt_lock)
168 #define MESH_RT_LOCK_ASSERT(ms) mtx_assert(&(ms)->ms_rt_lock, MA_OWNED)
169 #define MESH_RT_UNLOCK(ms) mtx_unlock(&(ms)->ms_rt_lock)
186 mesh_rt_find_locked(struct ieee80211_mesh_state *ms,
191 MESH_RT_LOCK_ASSERT(ms);
193 TAILQ_FOREACH(rt, &ms->ms_routes, rt_next) {
204 struct ieee80211_mesh_state *ms = vap->iv_mesh;
210 MESH_RT_LOCK_ASSERT(ms);
213 ms->ms_ppath->mpp_privlen, M_80211_MESH_RT, M_NOWAIT | M_ZERO);
221 TAILQ_INSERT_TAIL(&ms->ms_routes, rt, rt_next);
230 struct ieee80211_mesh_state *ms = vap->iv_mesh;
233 MESH_RT_LOCK(ms);
234 rt = mesh_rt_find_locked(ms, dest);
235 MESH_RT_UNLOCK(ms);
243 struct ieee80211_mesh_state *ms = vap->iv_mesh;
251 MESH_RT_LOCK(ms);
253 MESH_RT_UNLOCK(ms);
308 struct ieee80211_mesh_state *ms = vap->iv_mesh;
311 MESH_RT_LOCK(ms);
312 rt = mesh_rt_find_locked(ms, dest);
347 MESH_RT_UNLOCK(ms);
351 mesh_rt_del(struct ieee80211_mesh_state *ms, struct ieee80211_mesh_route *rt)
353 TAILQ_REMOVE(&ms->ms_routes, rt, rt_next);
368 struct ieee80211_mesh_state *ms = vap->iv_mesh;
371 MESH_RT_LOCK(ms);
372 TAILQ_FOREACH_SAFE(rt, &ms->ms_routes, rt_next, next) {
375 ms->ms_ppath->mpp_senderror(vap, dest, rt,
378 ms->ms_ppath->mpp_senderror(vap, dest, rt,
381 mesh_rt_del(ms, rt);
382 MESH_RT_UNLOCK(ms);
386 MESH_RT_UNLOCK(ms);
392 struct ieee80211_mesh_state *ms = vap->iv_mesh;
395 if (ms == NULL)
397 MESH_RT_LOCK(ms);
398 TAILQ_FOREACH_SAFE(rt, &ms->ms_routes, rt_next, next)
399 mesh_rt_del(ms, rt);
400 MESH_RT_UNLOCK(ms);
407 struct ieee80211_mesh_state *ms = vap->iv_mesh;
410 MESH_RT_LOCK(ms);
411 TAILQ_FOREACH_SAFE(rt, &ms->ms_routes, rt_next, next) {
413 mesh_rt_del(ms, rt);
415 MESH_RT_UNLOCK(ms);
425 struct ieee80211_mesh_state *ms = vap->iv_mesh;
428 if (ms == NULL)
430 MESH_RT_LOCK(ms);
431 TAILQ_FOREACH_SAFE(rt, &ms->ms_routes, rt_next, next) {
437 mesh_rt_del(ms, rt);
439 MESH_RT_UNLOCK(ms);
485 struct ieee80211_mesh_state *ms = vap->iv_mesh;
490 ms->ms_ppath = &mesh_proto_paths[i];
500 struct ieee80211_mesh_state *ms = vap->iv_mesh;
505 ms->ms_pmetric = &mesh_proto_metrics[i];
516 struct ieee80211_mesh_state *ms = vap->iv_mesh;
524 if (ms->ms_flags & IEEE80211_MESHFLAGS_ROOT ||
525 (ms->ms_flags & IEEE80211_MESHFLAGS_GATE) == 0) {
526 callout_drain(&ms->ms_gatetimer);
529 callout_reset(&ms->ms_gatetimer, ieee80211_mesh_gateint,
537 struct ieee80211_mesh_state *ms = vap->iv_mesh;
542 gann.gann_ttl = ms->ms_ttl;
544 gann.gann_seq = ms->ms_gateseq++;
647 struct ieee80211_mesh_state *ms = vap->iv_mesh;
649 callout_drain(&ms->ms_cleantimer);
653 mtx_destroy(&ms->ms_rt_lock);
654 ms->ms_ppath->mpp_vdetach(vap);
662 struct ieee80211_mesh_state *ms;
668 ms = malloc(sizeof(struct ieee80211_mesh_state), M_80211_VAP,
670 if (ms == NULL) {
674 vap->iv_mesh = ms;
675 ms->ms_seq = 0;
676 ms->ms_flags = (IEEE80211_MESHFLAGS_AP | IEEE80211_MESHFLAGS_FWD);
677 ms->ms_ttl = IEEE80211_MESH_DEFAULT_TTL;
678 TAILQ_INIT(&ms->ms_known_gates);
679 TAILQ_INIT(&ms->ms_routes);
680 mtx_init(&ms->ms_rt_lock, "MBSS", "802.11s routing table", MTX_DEF);
681 callout_init(&ms->ms_cleantimer, CALLOUT_MPSAFE);
682 callout_init(&ms->ms_gatetimer, CALLOUT_MPSAFE);
683 ms->ms_gateseq = 0;
685 KASSERT(ms->ms_pmetric, ("ms_pmetric == NULL"));
687 KASSERT(ms->ms_ppath, ("ms_ppath == NULL"));
688 ms->ms_ppath->mpp_vattach(vap);
697 struct ieee80211_mesh_state *ms = vap->iv_mesh;
713 callout_drain(&ms->ms_cleantimer);
714 callout_drain(&ms->ms_gatetimer);
743 ms->ms_idlen != 0) {
838 callout_reset(&ms->ms_cleantimer, ms->ms_ppath->mpp_inact,
846 ms->ms_ppath->mpp_newstate(vap, ostate, arg);
854 struct ieee80211_mesh_state *ms = vap->iv_mesh;
857 callout_reset(&ms->ms_cleantimer, ms->ms_ppath->mpp_inact,
870 struct ieee80211_mesh_state *ms = vap->iv_mesh;
874 MESH_RT_LOCK(ms);
875 TAILQ_FOREACH_SAFE(gr, &ms->ms_known_gates, gr_next, next) {
889 TAILQ_INSERT_TAIL(&ms->ms_known_gates, gr, gr_next);
893 MESH_RT_UNLOCK(ms);
906 struct ieee80211_mesh_state *ms = vap->iv_mesh;
924 KASSERT(ms->ms_neighbors < 65535, ("neighbor count overflow"));
925 ms->ms_neighbors++;
929 KASSERT(ms->ms_neighbors > 0, ("neighbor count 0"));
930 ms->ms_neighbors--;
936 ms->ms_ppath->mpp_peerdown(ni);
1076 struct ieee80211_mesh_state *ms = vap->iv_mesh;
1087 MESH_RT_LOCK(ms);
1093 TAILQ_FOREACH_SAFE(gr, &ms->ms_known_gates, gr_next, gr_next) {
1121 ieee80211_mesh_rt_update(rt_dest, ms->ms_ppath->mpp_inact);
1122 MESH_RT_UNLOCK(ms);
1134 MESH_RT_LOCK(ms);
1138 MESH_RT_UNLOCK(ms);
1150 struct ieee80211_mesh_state *ms = vap->iv_mesh;
1174 if (!(ms->ms_flags & IEEE80211_MESHFLAGS_FWD)) {
1218 ms->ms_ppath->mpp_senderror(vap, whcopy->i_addr3, NULL,
1382 struct ieee80211_mesh_state *ms = vap->iv_mesh;
1413 ms->ms_ppath->mpp_inact));
1419 ms->ms_ppath->mpp_inact));
1440 struct ieee80211_mesh_state *ms = vap->iv_mesh;
1459 ieee80211_mesh_rt_update(rt, ticks_to_msecs(ms->ms_ppath->mpp_inact));
1507 struct ieee80211_mesh_state *ms = vap->iv_mesh;
1522 if (ms->ms_flags & IEEE80211_MESHFLAGS_GATE &&
1523 ms->ms_flags & IEEE80211_MESHFLAGS_FWD)
1864 struct ieee80211_mesh_state *ms = vap->iv_mesh;
1930 if (memcmp(scan.meshid+2, ms->ms_id, ms->ms_idlen) != 0 ||
1959 (ms->ms_flags & IEEE80211_MESHFLAGS_AP)) {
1991 ms->ms_ppath->mpp_inact));
2265 struct ieee80211_mesh_state *ms = vap->iv_mesh;
2284 if (ms->ms_neighbors >= IEEE80211_MESH_MAX_NEIGHBORS) {
2590 struct ieee80211_mesh_state *ms = vap->iv_mesh;
2613 if (ms == NULL)
2615 MESH_RT_LOCK(ms);
2616 TAILQ_FOREACH_SAFE(gr, &ms->ms_known_gates, gr_next, next) {
2624 MESH_RT_UNLOCK(ms);
2639 TAILQ_INSERT_TAIL(&ms->ms_known_gates, gr, gr_next);
2644 rt_gate = mesh_rt_find_locked(ms, gr->gr_addr);
2651 MESH_RT_UNLOCK(ms);
2654 if ((ie.gann_ttl - 1) < 1 && !(ms->ms_flags & IEEE80211_MESHFLAGS_FWD))
3112 struct ieee80211_mesh_state *ms = vap->iv_mesh;
3114 if (ie == NULL || ie[1] != ms->ms_idlen)
3116 return memcmp(ms->ms_id, ie + 2, ms->ms_idlen);
3127 const struct ieee80211_mesh_state *ms = vap->iv_mesh;
3131 if (meshconf->conf_pselid != ms->ms_ppath->mpp_ie) {
3137 if (meshconf->conf_pmetid != ms->ms_pmetric->mpm_ie) {
3216 struct ieee80211_mesh_state *ms = vap->iv_mesh;
3221 *frm++ = ms->ms_idlen;
3222 memcpy(frm, ms->ms_id, ms->ms_idlen);
3223 return frm + ms->ms_idlen;
3234 const struct ieee80211_mesh_state *ms = vap->iv_mesh;
3241 *frm++ = ms->ms_ppath->mpp_ie; /* path selection */
3242 *frm++ = ms->ms_pmetric->mpm_ie; /* link metric */
3247 *frm = (ms->ms_neighbors > IEEE80211_MESH_MAX_NEIGHBORS ?
3248 IEEE80211_MESH_MAX_NEIGHBORS : ms->ms_neighbors) << 1;
3249 if (ms->ms_flags & IEEE80211_MESHFLAGS_GATE)
3253 if (ms->ms_flags & IEEE80211_MESHFLAGS_AP)
3255 if (ms->ms_flags & IEEE80211_MESHFLAGS_FWD)
3396 struct ieee80211_mesh_state *ms = vap->iv_mesh;
3402 ms->ms_ppath->mpp_peerdown(ni);
3438 struct ieee80211_mesh_state *ms = vap->iv_mesh;
3452 ireq->i_len = ms->ms_idlen;
3453 memcpy(tmpmeshid, ms->ms_id, ireq->i_len);
3457 ireq->i_val = (ms->ms_flags & IEEE80211_MESHFLAGS_AP) != 0;
3460 ireq->i_val = (ms->ms_flags & IEEE80211_MESHFLAGS_FWD) != 0;
3463 ireq->i_val = (ms->ms_flags & IEEE80211_MESHFLAGS_GATE) != 0;
3466 ireq->i_val = ms->ms_ttl;
3472 MESH_RT_LOCK(ms);
3473 TAILQ_FOREACH(rt, &ms->ms_routes, rt_next) {
3476 MESH_RT_UNLOCK(ms);
3487 MESH_RT_LOCK(ms);
3488 TAILQ_FOREACH(rt, &ms->ms_routes, rt_next) {
3505 MESH_RT_UNLOCK(ms);
3519 len = strlen(ms->ms_pmetric->mpm_descr);
3523 error = copyout(ms->ms_pmetric->mpm_descr,
3527 len = strlen(ms->ms_ppath->mpp_descr);
3531 error = copyout(ms->ms_ppath->mpp_descr,
3545 struct ieee80211_mesh_state *ms = vap->iv_mesh;
3562 memset(ms->ms_id, 0, IEEE80211_NWID_LEN);
3563 ms->ms_idlen = ireq->i_len;
3564 memcpy(ms->ms_id, tmpmeshid, ireq->i_len);
3569 ms->ms_flags |= IEEE80211_MESHFLAGS_AP;
3571 ms->ms_flags &= ~IEEE80211_MESHFLAGS_AP;
3576 ms->ms_flags |= IEEE80211_MESHFLAGS_FWD;
3578 ms->ms_flags &= ~IEEE80211_MESHFLAGS_FWD;
3583 ms->ms_flags |= IEEE80211_MESHFLAGS_GATE;
3585 ms->ms_flags &= ~IEEE80211_MESHFLAGS_GATE;
3588 ms->ms_ttl = (uint8_t) ireq->i_val;