Lines Matching defs:ln
248 nd6_llinfo_settimer(const struct llinfo_nd6 *ln, unsigned int secs)
253 KASSERT(!ISSET(ln->ln_rt->rt_flags, RTF_LOCAL));
255 ln->ln_rt->rt_expire = expire;
265 struct llinfo_nd6 *ln, *nln;
276 TAILQ_FOREACH_SAFE(ln, &nd6_list, ln_list, nln) {
277 struct rtentry *rt = ln->ln_rt;
306 struct llinfo_nd6 *ln = (struct llinfo_nd6 *)rt->rt_llinfo;
315 switch (ln->ln_state) {
317 if (ln->ln_asked < nd6_mmaxtries) {
318 ln->ln_asked++;
319 nd6_llinfo_settimer(ln, RETRANS_TIMER / 1000);
321 &ln->ln_saddr6, 0);
327 mq_delist(&ln->ln_mq, &ml);
343 if (mq_len(&ln->ln_mq) > 0) {
346 len + mq_purge(&ln->ln_mq));
351 ln = NULL;
356 if (!ND6_LLINFO_PERMANENT(ln)) {
357 ln->ln_state = ND6_LLINFO_STALE;
358 nd6_llinfo_settimer(ln, nd6_gctimer);
365 if (!ND6_LLINFO_PERMANENT(ln)) {
367 ln = NULL;
373 ln->ln_asked = 1;
374 ln->ln_state = ND6_LLINFO_PROBE;
375 nd6_llinfo_settimer(ln, RETRANS_TIMER / 1000);
377 &ln->ln_saddr6, 0);
381 if (ln->ln_asked < nd6_umaxtries) {
382 ln->ln_asked++;
383 nd6_llinfo_settimer(ln, RETRANS_TIMER / 1000);
385 &ln->ln_saddr6, 0);
388 ln = NULL;
395 return (ln == NULL);
480 struct llinfo_nd6 *ln, *nln;
488 TAILQ_FOREACH_SAFE(ln, &nd6_list, ln_list, nln) {
492 rt = ln->ln_rt;
532 struct llinfo_nd6 *ln;
563 ln = (struct llinfo_nd6 *)rt->rt_llinfo;
564 if (ln != NULL)
565 ln->ln_state = ND6_LLINFO_NOSTATE;
646 struct llinfo_nd6 *ln;
650 ln = (struct llinfo_nd6 *)rt->rt_llinfo;
651 if (ln == NULL) {
655 atomic_sub_int(&ln_hold_total, mq_purge(&ln->ln_mq));
657 ln->ln_state = ND6_LLINFO_INCOMPLETE;
658 ln->ln_asked = 0;
668 struct llinfo_nd6 *ln = (struct llinfo_nd6 *)rt->rt_llinfo;
677 if (ln->ln_router) {
709 struct llinfo_nd6 *ln;
726 ln = (struct llinfo_nd6 *)rt->rt_llinfo;
727 if (ln->ln_state < ND6_LLINFO_REACHABLE)
734 ln->ln_byhint++;
735 if (ln->ln_byhint > nd6_maxnudhint)
738 ln->ln_state = ND6_LLINFO_REACHABLE;
739 if (!ND6_LLINFO_PERMANENT(ln))
740 nd6_llinfo_settimer(ln, ifp->if_nd->reachable);
749 struct llinfo_nd6 *ln;
808 ln = pool_get(&nd6_pool, PR_NOWAIT | PR_ZERO);
809 if (ln == NULL) {
818 pool_put(&nd6_pool, ln);
822 mq_init(&ln->ln_mq, LN_HOLD_QUEUE, IPL_SOFTNET);
823 rt->rt_llinfo = (caddr_t)ln;
824 ln->ln_rt = rt;
826 TAILQ_INSERT_HEAD(&nd6_list, ln, ln_list);
831 * and ln expire should have some lifetime
834 ln->ln_state = ND6_LLINFO_REACHABLE;
835 ln->ln_byhint = 0;
841 ln->ln_state = ND6_LLINFO_NOSTATE;
842 nd6_llinfo_settimer(ln, 0);
860 if (ln_end == ln)
887 ln->ln_state = ND6_LLINFO_REACHABLE;
888 ln->ln_byhint = 0;
922 ln = (struct llinfo_nd6 *)rt->rt_llinfo;
923 if (ln == NULL) {
929 TAILQ_REMOVE(&nd6_list, ln, ln_list);
933 atomic_sub_int(&ln_hold_total, mq_purge(&ln->ln_mq));
936 pool_put(&nd6_pool, ln);
981 struct llinfo_nd6 *ln;
1001 (ln = (struct llinfo_nd6 *)rt->rt_llinfo) == NULL) {
1007 expire = ln->ln_rt->rt_expire;
1013 nbi->state = ln->ln_state;
1014 nbi->asked = ln->ln_asked;
1015 nbi->isrouter = ln->ln_router;
1039 struct llinfo_nd6 *ln;
1089 ln = (struct llinfo_nd6 *)rt->rt_llinfo;
1090 if (ln == NULL)
1152 ln->ln_state = newstate;
1154 if (ln->ln_state == ND6_LLINFO_STALE) {
1161 nd6_llinfo_settimer(ln, nd6_gctimer);
1162 if_output_mq(ifp, &ln->ln_mq, &ln_hold_total,
1164 } else if (ln->ln_state == ND6_LLINFO_INCOMPLETE) {
1166 nd6_llinfo_settimer(ln, 0);
1205 ln->ln_router = 0;
1214 ln->ln_router = 1;
1216 ln->ln_router = 0;
1222 ln->ln_router = 0;
1230 ln->ln_router = 1;
1270 struct llinfo_nd6 *ln;
1309 ln = (struct llinfo_nd6 *)rt->rt_llinfo;
1310 if (ln == NULL) {
1320 TAILQ_REMOVE(&nd6_list, ln, ln_list);
1321 TAILQ_INSERT_HEAD(&nd6_list, ln, ln_list);
1330 if (ln->ln_state == ND6_LLINFO_STALE) {
1331 ln->ln_asked = 0;
1332 ln->ln_state = ND6_LLINFO_DELAY;
1333 nd6_llinfo_settimer(ln, nd6_delay);
1341 if (ln->ln_state > ND6_LLINFO_INCOMPLETE) {
1363 if (ln->ln_state == ND6_LLINFO_NOSTATE)
1364 ln->ln_state = ND6_LLINFO_INCOMPLETE;
1367 memcpy(&ln->ln_saddr6, &mtod(m, struct ip6_hdr *)->ip6_src,
1368 sizeof(ln->ln_saddr6));
1371 if (mq_push(&ln->ln_mq, m) != 0)
1374 atomic_sub_int(&ln_hold_total, mq_purge(&ln->ln_mq) + 1);
1382 if (!ND6_LLINFO_PERMANENT(ln) && ln->ln_asked == 0) {
1383 ln->ln_asked++;
1384 nd6_llinfo_settimer(ln, RETRANS_TIMER / 1000);
1385 saddr6 = ln->ln_saddr6;