Lines Matching refs:ag
124 ag_out(struct ag_info *ag, void (*out)(struct ag_info *)) in ag_out() argument
131 if (ag->ag_state & AGS_SPLIT_HZ) in ag_out()
144 ag_cors = ag->ag_cors; in ag_out()
146 ag_cors->ag_mask == (ag->ag_mask << 1) && in ag_out()
147 ag_cors->ag_dst_h == (ag->ag_dst_h & ag_cors->ag_mask)) { in ag_out()
148 ag_cors->ag_state |= ((ag_cors->ag_dst_h == ag->ag_dst_h) ? in ag_out()
158 if (ag->ag_state & AGS_REDUN0) { in ag_out()
159 if (ag->ag_state & AGS_REDUN1) in ag_out()
162 bit = (-ag->ag_mask) >> 1; in ag_out()
163 ag->ag_dst_h |= bit; in ag_out()
164 ag->ag_mask |= bit; in ag_out()
166 } else if (ag->ag_state & AGS_REDUN1) { in ag_out()
168 bit = (-ag->ag_mask) >> 1; in ag_out()
169 ag->ag_mask |= bit; in ag_out()
171 out(ag); in ag_out()
176 ag_del(struct ag_info *ag) in ag_del() argument
180 if (ag->ag_cors == NULL) in ag_del()
181 ag_corsest = ag->ag_fine; in ag_del()
183 ag->ag_cors->ag_fine = ag->ag_fine; in ag_del()
185 if (ag->ag_fine == NULL) in ag_del()
186 ag_finest = ag->ag_cors; in ag_del()
188 ag->ag_fine->ag_cors = ag->ag_cors; in ag_del()
190 ag->ag_fine = ag_avail; in ag_del()
191 ag_avail = ag; in ag_del()
199 ag_find_suppressor(struct ag_info *ag) in ag_find_suppressor() argument
202 in_addr_t dst_h = ag->ag_dst_h; in ag_find_suppressor()
204 for (ag_cors = ag->ag_cors; ag_cors != NULL; in ag_find_suppressor()
216 if (ag_cors->ag_pref <= ag->ag_pref && in ag_find_suppressor()
217 (((ag->ag_nhop == ag_cors->ag_nhop) && in ag_find_suppressor()
218 (ag->ag_ifp == ag_cors->ag_ifp)) || in ag_find_suppressor()
220 ag->ag_state & AGS_FINE_GATE)) { in ag_find_suppressor()
243 struct ag_info *ag, *ag_cors, *ag_supr; in ag_flush() local
247 for (ag = ag_finest; ag != NULL && ag->ag_mask >= lim_mask; in ag_flush()
248 ag = ag_cors) { in ag_flush()
250 ag_cors = ag->ag_cors; in ag_flush()
253 dst_h = ag->ag_dst_h; in ag_flush()
261 if (!(ag->ag_state & AGS_SUPPRESS)) { in ag_flush()
262 ag_out(ag, out); in ag_flush()
263 ag_del(ag); in ag_flush()
267 ag_supr = ag_find_suppressor(ag); in ag_flush()
273 ag_out(ag, out); in ag_flush()
281 rtname(htonl(ag->ag_dst_h), ag->ag_mask, in ag_flush()
282 ag->ag_nhop)); in ag_flush()
291 if (AG_IS_REDUN(ag->ag_state) && in ag_flush()
292 ag_supr->ag_mask == (ag->ag_mask<<1)) { in ag_flush()
298 if (ag->ag_tag != ag_supr->ag_tag) in ag_flush()
300 if (ag->ag_nhop != ag_supr->ag_nhop) in ag_flush()
305 ag_del(ag); in ag_flush()
326 struct ag_info *ag, *nag, *ag_cors; in ag_check() local
359 ag = ag_corsest; in ag_check()
360 while (ag != NULL) { in ag_check()
361 if (ag->ag_mask >= mask) in ag_check()
374 if (ag_cors != NULL && ag->ag_dst_h < dst && in ag_check()
375 (ag->ag_state & AGS_SUPPRESS) && in ag_check()
376 ag_cors->ag_pref <= ag->ag_pref && in ag_check()
377 (ag->ag_dst_h & ag_cors->ag_mask) == ag_cors->ag_dst_h && in ag_check()
378 ((ag_cors->ag_nhop == ag->ag_nhop && in ag_check()
379 (ag_cors->ag_ifp == ag->ag_ifp))|| in ag_check()
380 (ag->ag_state & AGS_FINE_GATE) || in ag_check()
386 if (AG_IS_REDUN(ag->ag_state) && in ag_check()
387 ag_cors->ag_mask == (ag->ag_mask << 1)) { in ag_check()
393 if (ag->ag_tag != ag_cors->ag_tag) in ag_check()
395 if (ag->ag_nhop != ag_cors->ag_nhop) in ag_check()
397 ag_del(ag); in ag_check()
400 ag_cors = ag; in ag_check()
402 ag = ag_cors->ag_fine; in ag_check()
415 while (ag != NULL && ag->ag_mask == mask && in ag_check()
416 ((ag->ag_dst_h ^ dst) & (mask<<1)) == 0) { in ag_check()
424 if (ag->ag_dst_h == dst) { in ag_check()
425 if (ag->ag_nhop == nhop && ag->ag_ifp == ifp) { in ag_check()
440 if (pref <= ag->ag_pref) { in ag_check()
441 ag->ag_gate = gate; in ag_check()
442 ag->ag_ifp = ifp; in ag_check()
443 ag->ag_nhop = nhop; in ag_check()
444 ag->ag_tag = tag; in ag_check()
445 ag->ag_metric = metric; in ag_check()
446 ag->ag_pref = pref; in ag_check()
447 if (seqno > ag->ag_seqno) in ag_check()
448 ag->ag_seqno = seqno; in ag_check()
449 tmp = ag->ag_state; in ag_check()
450 ag->ag_state = state; in ag_check()
459 if (!(ag->ag_state & AGS_IF)) in ag_check()
460 ag->ag_state |= in ag_check()
484 (ag->ag_state & AGS_SUPPRESS)) && in ag_check()
485 !((ag->ag_state & AGS_AGGREGATE) && (state & AGS_SUPPRESS))) in ag_check()
493 if (AG_IS_REDUN(ag->ag_state) || AG_IS_REDUN(state) || in ag_check()
494 (ag->ag_nhop == nhop && ag->ag_ifp == ifp && in ag_check()
495 ag->ag_pref == pref && in ag_check()
496 (state & ag->ag_state & AGS_AGGREGATE) != 0)) { in ag_check()
505 if (seqno < ag->ag_seqno) in ag_check()
506 seqno = ag->ag_seqno; in ag_check()
509 if (AG_IS_REDUN(ag->ag_state)) in ag_check()
513 state |= (ag->ag_state & AGS_AGGREGATE_EITHER); in ag_check()
514 if (ag->ag_tag != tag) in ag_check()
516 if (ag->ag_nhop != nhop) in ag_check()
523 ag_del(ag); in ag_check()
525 } else if (ag->ag_pref >= pref && in ag_check()
526 (ag->ag_state & AGS_AGGREGATE)) { in ag_check()
534 ag->ag_dst_h = dst; in ag_check()
536 xaddr = ag->ag_gate; in ag_check()
537 ag->ag_gate = gate; in ag_check()
540 xifp = ag->ag_ifp; in ag_check()
541 ag->ag_ifp = ifp; in ag_check()
544 xaddr = ag->ag_nhop; in ag_check()
545 ag->ag_nhop = nhop; in ag_check()
548 tmp = ag->ag_tag; in ag_check()
549 ag->ag_tag = tag; in ag_check()
558 tmp = ag->ag_state; in ag_check()
562 ag->ag_state = state; in ag_check()
565 tmp = ag->ag_metric; in ag_check()
566 ag->ag_metric = metric; in ag_check()
569 tmp = ag->ag_pref; in ag_check()
570 ag->ag_pref = pref; in ag_check()
574 if (seqno <= ag->ag_seqno) in ag_check()
575 seqno = ag->ag_seqno; in ag_check()
577 ag->ag_seqno = seqno; in ag_check()
594 if (seqno < ag->ag_seqno) in ag_check()
595 seqno = ag->ag_seqno; in ag_check()
597 ag->ag_seqno = seqno; in ag_check()
604 ag = ag_corsest; in ag_check()
607 ag = ag_cors; in ag_check()
608 ag_cors = ag->ag_cors; in ag_check()
620 if (ag != NULL && ag->ag_mask < mask) { in ag_check()
621 ag_cors = ag; in ag_check()
622 ag = ag->ag_fine; in ag_check()
626 if (ag != NULL && ag->ag_mask == mask) { in ag_check()
627 ag_flush(ag->ag_dst_h, ag->ag_mask, out); in ag_check()
628 ag = (ag_cors == NULL) ? ag_corsest : ag_cors->ag_fine; in ag_check()
632 if (ag == NULL && ag_cors != ag_finest) in ag_check()
634 if (ag_cors == NULL && ag != ag_corsest) in ag_check()
636 if (ag != NULL && ag->ag_cors != ag_cors) in ag_check()
638 if (ag_cors != NULL && ag_cors->ag_fine != ag) in ag_check()
658 nag->ag_fine = ag; in ag_check()
659 if (ag != NULL) in ag_check()
660 ag->ag_cors = nag; in ag_check()
1880 kern_out(struct ag_info *ag) in kern_out() argument
1885 ifp = ag->ag_ifp; in kern_out()
1892 if (ag->ag_metric == HOPCNT_INFINITY) { in kern_out()
1893 k = kern_find(htonl(ag->ag_dst_h), ag->ag_mask, in kern_out()
1894 ag->ag_nhop, ag->ag_ifp, NULL); in kern_out()
1898 k = kern_add(htonl(ag->ag_dst_h), ag->ag_mask, ag->ag_nhop, in kern_out()
1905 if (ag->ag_state & AGS_GATEWAY) in kern_out()
1907 if (ag->ag_state & AGS_IF) in kern_out()
1909 if (ag->ag_state & AGS_PASSIVE) in kern_out()
1911 if (ag->ag_state & AGS_FILE) in kern_out()
1913 k->k_gate = ag->ag_nhop; in kern_out()
1915 k->k_metric = ag->ag_metric; in kern_out()
1925 if (k->k_gate == ag->ag_nhop && k->k_ifp == ag->ag_ifp && in kern_out()
1926 k->k_metric != ag->ag_metric) { in kern_out()
1933 k->k_gate = ag->ag_nhop; in kern_out()
1934 k->k_metric = ag->ag_metric; in kern_out()
1949 if ((k->k_state & KS_GATEWAY) && !(ag->ag_state & AGS_GATEWAY)) { in kern_out()
1952 } else if (!(k->k_state & KS_GATEWAY) && (ag->ag_state & AGS_GATEWAY)) { in kern_out()
2243 struct ag_info *ag; in rtinit() local
2251 for (ag = ag_slots, i = 1; i < NUM_AG_SLOTS; i++) { in rtinit()
2252 ag->ag_fine = ag+1; in rtinit()
2253 ag++; in rtinit()