Lines Matching defs:ag

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