Lines Matching defs:rt

186 	struct ieee80211_mesh_route *rt;
190 TAILQ_FOREACH(rt, &ms->ms_routes, rt_next) {
191 if (IEEE80211_ADDR_EQ(dest, rt->rt_dest))
192 return rt;
202 struct ieee80211_mesh_route *rt;
209 rt = IEEE80211_MALLOC(ALIGN(sizeof(struct ieee80211_mesh_route)) +
212 if (rt != NULL) {
213 rt->rt_vap = vap;
214 IEEE80211_ADDR_COPY(rt->rt_dest, dest);
215 rt->rt_priv = (void *)ALIGN(&rt[1]);
216 MESH_RT_ENTRY_LOCK_INIT(rt, "MBSS_RT");
217 callout_init(&rt->rt_discovery, 1);
218 rt->rt_updtime = ticks; /* create time */
219 TAILQ_INSERT_TAIL(&ms->ms_routes, rt, rt_next);
221 return rt;
229 struct ieee80211_mesh_route *rt;
232 rt = mesh_rt_find_locked(ms, dest);
234 return rt;
242 struct ieee80211_mesh_route *rt;
250 rt = mesh_rt_add_locked(vap, dest);
252 return rt;
261 ieee80211_mesh_rt_update(struct ieee80211_mesh_route *rt, int new_lifetime)
266 KASSERT(rt != NULL, ("route is NULL"));
269 MESH_RT_ENTRY_LOCK(rt);
272 if (rt->rt_flags & IEEE80211_MESHRT_FLAGS_PROXY && rt->rt_nhops == 0) {
273 MESH_RT_ENTRY_UNLOCK(rt);
274 return rt->rt_lifetime;
277 timesince = ticks_to_msecs(now - rt->rt_updtime);
278 rt->rt_updtime = now;
279 if (timesince >= rt->rt_lifetime) {
281 rt->rt_lifetime = new_lifetime;
284 rt->rt_flags &= ~IEEE80211_MESHRT_FLAGS_VALID;
285 rt->rt_lifetime = 0;
289 rt->rt_lifetime = rt->rt_lifetime - timesince;
290 rt->rt_lifetime = MESH_ROUTE_LIFETIME_MAX(
291 new_lifetime, rt->rt_lifetime);
293 lifetime = rt->rt_lifetime;
294 MESH_RT_ENTRY_UNLOCK(rt);
307 struct ieee80211_mesh_route *rt;
310 rt = mesh_rt_find_locked(ms, dest);
311 if (rt == NULL) {
312 rt = mesh_rt_add_locked(vap, dest);
313 if (rt == NULL) {
320 IEEE80211_ADDR_COPY(rt->rt_mesh_gate, vap->iv_myaddr);
321 IEEE80211_ADDR_COPY(rt->rt_nexthop, vap->iv_myaddr);
322 rt->rt_flags |= IEEE80211_MESHRT_FLAGS_VALID
325 } else if ((rt->rt_flags & IEEE80211_MESHRT_FLAGS_VALID) == 0) {
326 KASSERT(rt->rt_flags & IEEE80211_MESHRT_FLAGS_PROXY,
337 IEEE80211_ADDR_COPY(rt->rt_nexthop, vap->iv_myaddr);
338 rt->rt_flags |= IEEE80211_MESHRT_FLAGS_VALID
349 mesh_rt_del(struct ieee80211_mesh_state *ms, struct ieee80211_mesh_route *rt)
351 TAILQ_REMOVE(&ms->ms_routes, rt, rt_next);
356 MESH_RT_ENTRY_LOCK(rt);
357 callout_drain(&rt->rt_discovery);
358 MESH_RT_ENTRY_LOCK_DESTROY(rt);
359 IEEE80211_FREE(rt, M_80211_MESH_RT);
367 struct ieee80211_mesh_route *rt, *next;
370 TAILQ_FOREACH_SAFE(rt, &ms->ms_routes, rt_next, next) {
371 if (IEEE80211_ADDR_EQ(rt->rt_dest, dest)) {
372 if (rt->rt_flags & IEEE80211_MESHRT_FLAGS_PROXY) {
373 ms->ms_ppath->mpp_senderror(vap, dest, rt,
376 ms->ms_ppath->mpp_senderror(vap, dest, rt,
379 mesh_rt_del(ms, rt);
391 struct ieee80211_mesh_route *rt, *next;
396 TAILQ_FOREACH_SAFE(rt, &ms->ms_routes, rt_next, next)
397 mesh_rt_del(ms, rt);
406 struct ieee80211_mesh_route *rt, *next;
409 TAILQ_FOREACH_SAFE(rt, &ms->ms_routes, rt_next, next) {
410 if (IEEE80211_ADDR_EQ(rt->rt_nexthop, peer))
411 mesh_rt_del(ms, rt);
424 struct ieee80211_mesh_route *rt, *next;
429 TAILQ_FOREACH_SAFE(rt, &ms->ms_routes, rt_next, next) {
431 if (rt->rt_flags & IEEE80211_MESHRT_FLAGS_DISCOVER)
433 ieee80211_mesh_rt_update(rt, 0);
434 if ((rt->rt_flags & IEEE80211_MESHRT_FLAGS_VALID) == 0)
435 mesh_rt_del(ms, rt);
863 struct ieee80211_mesh_route *rt)
887 gr->gr_route = rt;
977 struct ieee80211_mesh_route *rt;
979 rt = ieee80211_mesh_rt_find(vap, source);
980 if (rt == NULL) {
981 rt = ieee80211_mesh_rt_add(vap, source);
982 if (rt == NULL) {
990 rt->rt_lastmseq = seq;
993 if (IEEE80211_MESH_SEQ_GEQ(rt->rt_lastmseq, seq)) {
996 rt->rt_lastmseq = seq;
1008 struct ieee80211_mesh_route *rt;
1010 rt = ieee80211_mesh_rt_find(vap, dest);
1011 if (rt == NULL)
1013 if ((rt->rt_flags & IEEE80211_MESHRT_FLAGS_VALID) == 0) {
1015 "%s: !valid, flags 0x%x", __func__, rt->rt_flags);
1019 if (rt->rt_flags & IEEE80211_MESHRT_FLAGS_PROXY) {
1020 rt = ieee80211_mesh_rt_find(vap, rt->rt_mesh_gate);
1021 if (rt == NULL) return NULL;
1022 if ((rt->rt_flags & IEEE80211_MESHRT_FLAGS_VALID) == 0) {
1025 rt->rt_flags);
1030 return ieee80211_find_txnode(vap, rt->rt_nexthop);
1354 struct ieee80211_mesh_route *rt =
1357 return (rt != NULL &&
1358 (rt->rt_flags & IEEE80211_MESHRT_FLAGS_PROXY));
1433 struct ieee80211_mesh_route *rt;
1449 rt = ieee80211_mesh_rt_find(vap, qwh->i_addr4);
1450 KASSERT(rt != NULL, ("no route"));
1451 ieee80211_mesh_rt_update(rt, ticks_to_msecs(ms->ms_ppath->mpp_inact));
1452 rt = NULL;
1462 rt = ieee80211_mesh_rt_find(vap, mc10->mc_addr5);
1463 if (rt != NULL &&
1464 (rt->rt_flags & IEEE80211_MESHRT_FLAGS_VALID) &&
1465 (rt->rt_flags & IEEE80211_MESHRT_FLAGS_PROXY) == 0) {
1836 struct ieee80211_mesh_route *rt;
1962 rt = ieee80211_mesh_rt_find(vap, wh->i_addr2);
1963 if(rt != NULL) {
1964 ieee80211_mesh_rt_update(rt,
3412 struct ieee80211_mesh_route *rt;
3445 TAILQ_FOREACH(rt, &ms->ms_routes, rt_next) {
3461 TAILQ_FOREACH(rt, &ms->ms_routes, rt_next) {
3467 rt->rt_dest);
3469 rt->rt_nexthop);
3470 imr->imr_metric = rt->rt_metric;
3471 imr->imr_nhops = rt->rt_nhops;
3473 ieee80211_mesh_rt_update(rt, 0);
3474 imr->imr_lastmseq = rt->rt_lastmseq;
3475 imr->imr_flags = rt->rt_flags; /* last */