Lines Matching refs:rt

190 	struct ieee80211_mesh_route *rt;
194 TAILQ_FOREACH(rt, &ms->ms_routes, rt_next) {
195 if (IEEE80211_ADDR_EQ(dest, rt->rt_dest))
196 return rt;
206 struct ieee80211_mesh_route *rt;
213 rt = IEEE80211_MALLOC(ALIGN(sizeof(struct ieee80211_mesh_route)) +
216 if (rt != NULL) {
217 rt->rt_vap = vap;
218 IEEE80211_ADDR_COPY(rt->rt_dest, dest);
219 rt->rt_priv = (void *)ALIGN(&rt[1]);
220 MESH_RT_ENTRY_LOCK_INIT(rt, "MBSS_RT");
221 callout_init(&rt->rt_discovery, 1);
222 rt->rt_updtime = ticks; /* create time */
223 TAILQ_INSERT_TAIL(&ms->ms_routes, rt, rt_next);
225 return rt;
233 struct ieee80211_mesh_route *rt;
236 rt = mesh_rt_find_locked(ms, dest);
238 return rt;
246 struct ieee80211_mesh_route *rt;
254 rt = mesh_rt_add_locked(vap, dest);
256 return rt;
265 ieee80211_mesh_rt_update(struct ieee80211_mesh_route *rt, int new_lifetime)
270 KASSERT(rt != NULL, ("route is NULL"));
273 MESH_RT_ENTRY_LOCK(rt);
276 if (rt->rt_flags & IEEE80211_MESHRT_FLAGS_PROXY && rt->rt_nhops == 0) {
277 MESH_RT_ENTRY_UNLOCK(rt);
278 return rt->rt_lifetime;
281 timesince = ticks_to_msecs(now - rt->rt_updtime);
282 rt->rt_updtime = now;
283 if (timesince >= rt->rt_lifetime) {
285 rt->rt_lifetime = new_lifetime;
288 rt->rt_flags &= ~IEEE80211_MESHRT_FLAGS_VALID;
289 rt->rt_lifetime = 0;
293 rt->rt_lifetime = rt->rt_lifetime - timesince;
294 rt->rt_lifetime = MESH_ROUTE_LIFETIME_MAX(
295 new_lifetime, rt->rt_lifetime);
297 lifetime = rt->rt_lifetime;
298 MESH_RT_ENTRY_UNLOCK(rt);
311 struct ieee80211_mesh_route *rt;
314 rt = mesh_rt_find_locked(ms, dest);
315 if (rt == NULL) {
316 rt = mesh_rt_add_locked(vap, dest);
317 if (rt == NULL) {
324 IEEE80211_ADDR_COPY(rt->rt_mesh_gate, vap->iv_myaddr);
325 IEEE80211_ADDR_COPY(rt->rt_nexthop, vap->iv_myaddr);
326 rt->rt_flags |= IEEE80211_MESHRT_FLAGS_VALID
329 } else if ((rt->rt_flags & IEEE80211_MESHRT_FLAGS_VALID) == 0) {
330 KASSERT(rt->rt_flags & IEEE80211_MESHRT_FLAGS_PROXY,
341 IEEE80211_ADDR_COPY(rt->rt_nexthop, vap->iv_myaddr);
342 rt->rt_flags |= IEEE80211_MESHRT_FLAGS_VALID
353 mesh_rt_del(struct ieee80211_mesh_state *ms, struct ieee80211_mesh_route *rt)
355 TAILQ_REMOVE(&ms->ms_routes, rt, rt_next);
360 MESH_RT_ENTRY_LOCK(rt);
361 callout_drain(&rt->rt_discovery);
362 MESH_RT_ENTRY_LOCK_DESTROY(rt);
363 IEEE80211_FREE(rt, M_80211_MESH_RT);
371 struct ieee80211_mesh_route *rt, *next;
374 TAILQ_FOREACH_SAFE(rt, &ms->ms_routes, rt_next, next) {
375 if (IEEE80211_ADDR_EQ(rt->rt_dest, dest)) {
376 if (rt->rt_flags & IEEE80211_MESHRT_FLAGS_PROXY) {
377 ms->ms_ppath->mpp_senderror(vap, dest, rt,
380 ms->ms_ppath->mpp_senderror(vap, dest, rt,
383 mesh_rt_del(ms, rt);
395 struct ieee80211_mesh_route *rt, *next;
400 TAILQ_FOREACH_SAFE(rt, &ms->ms_routes, rt_next, next)
401 mesh_rt_del(ms, rt);
410 struct ieee80211_mesh_route *rt, *next;
413 TAILQ_FOREACH_SAFE(rt, &ms->ms_routes, rt_next, next) {
414 if (IEEE80211_ADDR_EQ(rt->rt_nexthop, peer))
415 mesh_rt_del(ms, rt);
428 struct ieee80211_mesh_route *rt, *next;
433 TAILQ_FOREACH_SAFE(rt, &ms->ms_routes, rt_next, next) {
435 if (rt->rt_flags & IEEE80211_MESHRT_FLAGS_DISCOVER)
437 ieee80211_mesh_rt_update(rt, 0);
438 if ((rt->rt_flags & IEEE80211_MESHRT_FLAGS_VALID) == 0)
439 mesh_rt_del(ms, rt);
867 struct ieee80211_mesh_route *rt)
891 gr->gr_route = rt;
981 struct ieee80211_mesh_route *rt;
983 rt = ieee80211_mesh_rt_find(vap, source);
984 if (rt == NULL) {
985 rt = ieee80211_mesh_rt_add(vap, source);
986 if (rt == NULL) {
994 rt->rt_lastmseq = seq;
997 if (IEEE80211_MESH_SEQ_GEQ(rt->rt_lastmseq, seq)) {
1000 rt->rt_lastmseq = seq;
1012 struct ieee80211_mesh_route *rt;
1014 rt = ieee80211_mesh_rt_find(vap, dest);
1015 if (rt == NULL)
1017 if ((rt->rt_flags & IEEE80211_MESHRT_FLAGS_VALID) == 0) {
1019 "%s: !valid, flags 0x%x", __func__, rt->rt_flags);
1023 if (rt->rt_flags & IEEE80211_MESHRT_FLAGS_PROXY) {
1024 rt = ieee80211_mesh_rt_find(vap, rt->rt_mesh_gate);
1025 if (rt == NULL) return NULL;
1026 if ((rt->rt_flags & IEEE80211_MESHRT_FLAGS_VALID) == 0) {
1029 rt->rt_flags);
1034 return ieee80211_find_txnode(vap, rt->rt_nexthop);
1357 struct ieee80211_mesh_route *rt =
1360 return (rt != NULL &&
1361 (rt->rt_flags & IEEE80211_MESHRT_FLAGS_PROXY));
1436 struct ieee80211_mesh_route *rt;
1452 rt = ieee80211_mesh_rt_find(vap, qwh->i_addr4);
1453 KASSERT(rt != NULL, ("no route"));
1454 ieee80211_mesh_rt_update(rt, ticks_to_msecs(ms->ms_ppath->mpp_inact));
1455 rt = NULL;
1465 rt = ieee80211_mesh_rt_find(vap, mc10->mc_addr5);
1466 if (rt != NULL &&
1467 (rt->rt_flags & IEEE80211_MESHRT_FLAGS_VALID) &&
1468 (rt->rt_flags & IEEE80211_MESHRT_FLAGS_PROXY) == 0) {
1840 struct ieee80211_mesh_route *rt;
1966 rt = ieee80211_mesh_rt_find(vap, wh->i_addr2);
1967 if(rt != NULL) {
1968 ieee80211_mesh_rt_update(rt,
3416 struct ieee80211_mesh_route *rt;
3449 TAILQ_FOREACH(rt, &ms->ms_routes, rt_next) {
3465 TAILQ_FOREACH(rt, &ms->ms_routes, rt_next) {
3471 rt->rt_dest);
3473 rt->rt_nexthop);
3474 imr->imr_metric = rt->rt_metric;
3475 imr->imr_nhops = rt->rt_nhops;
3477 ieee80211_mesh_rt_update(rt, 0);
3478 imr->imr_lastmseq = rt->rt_lastmseq;
3479 imr->imr_flags = rt->rt_flags; /* last */