Lines Matching refs:ag

111 ag_out(struct ag_info *ag,  in ag_out()  argument
119 if (ag->ag_state & AGS_SPLIT_HZ) in ag_out()
131 ag_cors = ag->ag_cors; in ag_out()
133 && ag_cors->ag_mask == ag->ag_mask<<1 in ag_out()
134 && ag_cors->ag_dst_h == (ag->ag_dst_h & ag_cors->ag_mask)) { in ag_out()
135 ag_cors->ag_state |= ((ag_cors->ag_dst_h == ag->ag_dst_h) in ag_out()
145 if (ag->ag_state & AGS_REDUN0) { in ag_out()
146 if (ag->ag_state & AGS_REDUN1) in ag_out()
149 bit = (-ag->ag_mask) >> 1; in ag_out()
150 ag->ag_dst_h |= bit; in ag_out()
151 ag->ag_mask |= bit; in ag_out()
153 } else if (ag->ag_state & AGS_REDUN1) { in ag_out()
155 bit = (-ag->ag_mask) >> 1; in ag_out()
156 ag->ag_mask |= bit; in ag_out()
158 out(ag); in ag_out()
163 ag_del(struct ag_info *ag) in ag_del() argument
167 if (ag->ag_cors == NULL) in ag_del()
168 ag_corsest = ag->ag_fine; in ag_del()
170 ag->ag_cors->ag_fine = ag->ag_fine; in ag_del()
172 if (ag->ag_fine == NULL) in ag_del()
173 ag_finest = ag->ag_cors; in ag_del()
175 ag->ag_fine->ag_cors = ag->ag_cors; in ag_del()
177 ag->ag_fine = ag_avail; in ag_del()
178 ag_avail = ag; in ag_del()
196 struct ag_info *ag, *ag_cors; in ag_flush() local
200 for (ag = ag_finest; in ag_flush()
201 ag != NULL && ag->ag_mask >= lim_mask; in ag_flush()
202 ag = ag_cors) { in ag_flush()
203 ag_cors = ag->ag_cors; in ag_flush()
206 dst_h = ag->ag_dst_h; in ag_flush()
210 if (!(ag->ag_state & AGS_SUPPRESS)) in ag_flush()
211 ag_out(ag, out); in ag_flush()
220 ag_out(ag, out); in ag_flush()
232 if (ag->ag_gate != ag_cors->ag_gate in ag_flush()
233 && !(ag->ag_state & AGS_FINE_GATE) in ag_flush()
235 ag_out(ag, out); in ag_flush()
244 if (ag_cors->ag_pref <= ag->ag_pref) { in ag_flush()
245 if (AG_IS_REDUN(ag->ag_state) in ag_flush()
246 && ag_cors->ag_mask==ag->ag_mask<<1) { in ag_flush()
252 if (ag->ag_tag != ag_cors->ag_tag) in ag_flush()
254 if (ag->ag_nhop != ag_cors->ag_nhop) in ag_flush()
262 ag_cors = ag->ag_cors; in ag_flush()
263 ag_del(ag); in ag_flush()
284 struct ag_info *ag, *nag, *ag_cors; in ag_check() local
314 ag = ag_corsest; in ag_check()
315 while (ag != NULL) { in ag_check()
316 if (ag->ag_mask >= mask) in ag_check()
329 && ag->ag_dst_h < dst in ag_check()
330 && (ag->ag_state & AGS_SUPPRESS) in ag_check()
331 && ag_cors->ag_pref <= ag->ag_pref in ag_check()
332 && (ag->ag_dst_h & ag_cors->ag_mask) == ag_cors->ag_dst_h in ag_check()
333 && (ag_cors->ag_gate == ag->ag_gate in ag_check()
334 || (ag->ag_state & AGS_FINE_GATE) in ag_check()
339 if (AG_IS_REDUN(ag->ag_state) in ag_check()
340 && ag_cors->ag_mask == ag->ag_mask<<1) { in ag_check()
346 if (ag->ag_tag != ag_cors->ag_tag) in ag_check()
348 if (ag->ag_nhop != ag_cors->ag_nhop) in ag_check()
350 ag_del(ag); in ag_check()
353 ag_cors = ag; in ag_check()
355 ag = ag_cors->ag_fine; in ag_check()
367 while (ag != NULL in ag_check()
368 && ag->ag_mask == mask in ag_check()
369 && ((ag->ag_dst_h ^ dst) & (mask<<1)) == 0) { in ag_check()
376 if (ag->ag_dst_h == dst) { in ag_check()
388 if (pref <= ag->ag_pref) { in ag_check()
389 ag->ag_gate = gate; in ag_check()
390 ag->ag_nhop = nhop; in ag_check()
391 ag->ag_tag = tag; in ag_check()
392 ag->ag_metric = metric; in ag_check()
393 ag->ag_pref = pref; in ag_check()
394 if (ag->ag_seqno < new_seqno) in ag_check()
395 ag->ag_seqno = new_seqno; in ag_check()
396 x = ag->ag_state; in ag_check()
397 ag->ag_state = state; in ag_check()
404 if (!(ag->ag_state & AGS_IF)) in ag_check()
405 ag->ag_state |= (state & (AGS_AGGREGATE_EITHER in ag_check()
419 && (ag->ag_state & AGS_SUPPRESS)) in ag_check()
420 && !((ag->ag_state & AGS_AGGREGATE) in ag_check()
428 if (AG_IS_REDUN(ag->ag_state) in ag_check()
430 || (ag->ag_gate == gate in ag_check()
431 && ag->ag_pref == pref in ag_check()
432 && (state & ag->ag_state & AGS_AGGREGATE) != 0)) { in ag_check()
440 if (new_seqno < ag->ag_seqno) in ag_check()
441 new_seqno = ag->ag_seqno; in ag_check()
444 if (AG_IS_REDUN(ag->ag_state)) in ag_check()
448 state |= (ag->ag_state & AGS_AGGREGATE_EITHER); in ag_check()
449 if (ag->ag_tag != tag) in ag_check()
451 if (ag->ag_nhop != nhop) in ag_check()
457 ag_del(ag); in ag_check()
459 } else if (ag->ag_pref >= pref in ag_check()
460 && (ag->ag_state & AGS_AGGREGATE)) { in ag_check()
467 ag->ag_dst_h = dst; in ag_check()
469 xaddr = ag->ag_gate; in ag_check()
470 ag->ag_gate = gate; in ag_check()
473 xaddr = ag->ag_nhop; in ag_check()
474 ag->ag_nhop = nhop; in ag_check()
477 x = ag->ag_tag; in ag_check()
478 ag->ag_tag = tag; in ag_check()
486 x = ag->ag_state; in ag_check()
490 ag->ag_state = state; in ag_check()
493 x = ag->ag_metric; in ag_check()
494 ag->ag_metric = metric; in ag_check()
497 x = ag->ag_pref; in ag_check()
498 ag->ag_pref = pref; in ag_check()
502 if (new_seqno <= ag->ag_seqno) in ag_check()
503 new_seqno = ag->ag_seqno; in ag_check()
505 ag->ag_seqno = new_seqno; in ag_check()
521 if (new_seqno < ag->ag_seqno) in ag_check()
522 new_seqno = ag->ag_seqno; in ag_check()
524 ag->ag_seqno = new_seqno; in ag_check()
531 ag = ag_corsest; in ag_check()
534 ag = ag_cors; in ag_check()
535 ag_cors = ag->ag_cors; in ag_check()
546 if (ag != NULL in ag_check()
547 && ag->ag_mask < mask) { in ag_check()
548 ag_cors = ag; in ag_check()
549 ag = ag->ag_fine; in ag_check()
554 if (ag != NULL && ag->ag_mask == mask) { in ag_check()
555 ag_flush(ag->ag_dst_h, ag->ag_mask, out); in ag_check()
556 ag = (ag_cors == NULL) ? ag_corsest : ag_cors->ag_fine; in ag_check()
561 if (ag == NULL && ag_cors != ag_finest) in ag_check()
563 if (ag_cors == NULL && ag != ag_corsest) in ag_check()
565 if (ag != NULL && ag->ag_cors != ag_cors) in ag_check()
567 if (ag_cors != NULL && ag_cors->ag_fine != ag) in ag_check()
587 nag->ag_fine = ag; in ag_check()
588 if (ag != NULL) in ag_check()
589 ag->ag_cors = nag; in ag_check()
1329 kern_out(struct ag_info *ag) in kern_out() argument
1338 if (ag->ag_metric == HOPCNT_INFINITY) { in kern_out()
1339 k = kern_find(htonl(ag->ag_dst_h), ag->ag_mask, 0); in kern_out()
1343 k = kern_add(htonl(ag->ag_dst_h), ag->ag_mask); in kern_out()
1349 if (ag->ag_state & AGS_GATEWAY) in kern_out()
1351 k->k_gate = ag->ag_gate; in kern_out()
1352 k->k_metric = ag->ag_metric; in kern_out()
1360 if (k->k_gate != ag->ag_gate in kern_out()
1361 || k->k_metric != ag->ag_metric) { in kern_out()
1365 k->k_gate = ag->ag_gate; in kern_out()
1366 k->k_metric = ag->ag_metric; in kern_out()
1381 && !(ag->ag_state & AGS_GATEWAY)) { in kern_out()
1385 && (ag->ag_state & AGS_GATEWAY)) { in kern_out()
1627 struct ag_info *ag; in rtinit() local
1636 for (ag = ag_slots, i = 1; i < NUM_AG_SLOTS; i++) { in rtinit()
1637 ag->ag_fine = ag+1; in rtinit()
1638 ag++; in rtinit()