Lines Matching defs:ag
124 ag_out(struct ag_info *ag,
132 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 == 0)
181 ag_corsest = ag->ag_fine;
183 ag->ag_cors->ag_fine = ag->ag_fine;
185 if (ag->ag_fine == 0)
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;
209 struct ag_info *ag, *ag_cors;
213 for (ag = ag_finest;
214 ag != 0 && ag->ag_mask >= lim_mask;
215 ag = ag_cors) {
216 ag_cors = ag->ag_cors;
219 dst_h = ag->ag_dst_h;
223 if (!(ag->ag_state & AGS_SUPPRESS))
224 ag_out(ag, out);
233 ag_out(ag, out);
245 if (ag->ag_gate != ag_cors->ag_gate
246 && !(ag->ag_state & AGS_FINE_GATE)
248 ag_out(ag, out);
257 if (ag_cors->ag_pref <= ag->ag_pref) {
258 if (AG_IS_REDUN(ag->ag_state)
259 && ag_cors->ag_mask==ag->ag_mask<<1) {
265 if (ag->ag_tag != ag_cors->ag_tag)
267 if (ag->ag_nhop != ag_cors->ag_nhop)
275 ag_cors = ag->ag_cors;
276 ag_del(ag);
297 struct ag_info *ag, *nag, *ag_cors;
327 ag = ag_corsest;
328 while (ag != 0) {
329 if (ag->ag_mask >= mask)
342 && ag->ag_dst_h < dst
343 && (ag->ag_state & AGS_SUPPRESS)
344 && ag_cors->ag_pref <= ag->ag_pref
345 && (ag->ag_dst_h & ag_cors->ag_mask) == ag_cors->ag_dst_h
346 && (ag_cors->ag_gate == ag->ag_gate
347 || (ag->ag_state & AGS_FINE_GATE)
352 if (AG_IS_REDUN(ag->ag_state)
353 && ag_cors->ag_mask == ag->ag_mask<<1) {
359 if (ag->ag_tag != ag_cors->ag_tag)
361 if (ag->ag_nhop != ag_cors->ag_nhop)
363 ag_del(ag);
366 ag_cors = ag;
368 ag = ag_cors->ag_fine;
380 while (ag != 0
381 && ag->ag_mask == mask
382 && ((ag->ag_dst_h ^ dst) & (mask<<1)) == 0) {
389 if (ag->ag_dst_h == dst) {
401 if (pref <= ag->ag_pref) {
402 ag->ag_gate = gate;
403 ag->ag_nhop = nhop;
404 ag->ag_tag = tag;
405 ag->ag_metric = metric;
406 ag->ag_pref = pref;
407 if (ag->ag_seqno < new_seqno)
408 ag->ag_seqno = new_seqno;
409 x = ag->ag_state;
410 ag->ag_state = state;
417 if (!(ag->ag_state & AGS_IF))
418 ag->ag_state |= (state & (AGS_AGGREGATE_EITHER
432 && (ag->ag_state & AGS_SUPPRESS))
433 && !((ag->ag_state & AGS_AGGREGATE)
441 if (AG_IS_REDUN(ag->ag_state)
443 || (ag->ag_gate == gate
444 && ag->ag_pref == pref
445 && (state & ag->ag_state & AGS_AGGREGATE) != 0)) {
453 if (new_seqno < ag->ag_seqno)
454 new_seqno = ag->ag_seqno;
457 if (AG_IS_REDUN(ag->ag_state))
461 state |= (ag->ag_state & AGS_AGGREGATE_EITHER);
462 if (ag->ag_tag != tag)
464 if (ag->ag_nhop != nhop)
470 ag_del(ag);
472 } else if (ag->ag_pref >= pref
473 && (ag->ag_state & AGS_AGGREGATE)) {
480 ag->ag_dst_h = dst;
482 xaddr = ag->ag_gate;
483 ag->ag_gate = gate;
486 xaddr = ag->ag_nhop;
487 ag->ag_nhop = nhop;
490 x = ag->ag_tag;
491 ag->ag_tag = tag;
499 x = ag->ag_state;
503 ag->ag_state = state;
506 x = ag->ag_metric;
507 ag->ag_metric = metric;
510 x = ag->ag_pref;
511 ag->ag_pref = pref;
515 if (new_seqno <= ag->ag_seqno)
516 new_seqno = ag->ag_seqno;
518 ag->ag_seqno = new_seqno;
534 if (new_seqno < ag->ag_seqno)
535 new_seqno = ag->ag_seqno;
537 ag->ag_seqno = new_seqno;
544 ag = ag_corsest;
547 ag = ag_cors;
548 ag_cors = ag->ag_cors;
559 if (ag != 0
560 && ag->ag_mask < mask) {
561 ag_cors = ag;
562 ag = ag->ag_fine;
567 if (ag != 0 && ag->ag_mask == mask) {
568 ag_flush(ag->ag_dst_h, ag->ag_mask, out);
569 ag = (ag_cors == 0) ? ag_corsest : ag_cors->ag_fine;
574 if (ag == 0 && ag_cors != ag_finest)
576 if (ag_cors == 0 && ag != ag_corsest)
578 if (ag != 0 && ag->ag_cors != ag_cors)
580 if (ag_cors != 0 && ag_cors->ag_fine != ag)
600 nag->ag_fine = ag;
601 if (ag != 0)
602 ag->ag_cors = nag;
1343 kern_out(struct ag_info *ag)
1352 if (ag->ag_metric == HOPCNT_INFINITY) {
1353 k = kern_find(htonl(ag->ag_dst_h), ag->ag_mask, 0);
1357 k = kern_add(htonl(ag->ag_dst_h), ag->ag_mask);
1363 if (ag->ag_state & AGS_GATEWAY)
1365 k->k_gate = ag->ag_gate;
1366 k->k_metric = ag->ag_metric;
1374 if (k->k_gate != ag->ag_gate
1375 || k->k_metric != ag->ag_metric) {
1379 k->k_gate = ag->ag_gate;
1380 k->k_metric = ag->ag_metric;
1395 && !(ag->ag_state & AGS_GATEWAY)) {
1399 && (ag->ag_state & AGS_GATEWAY)) {
1647 struct ag_info *ag;
1656 for (ag = ag_slots, i = 1; i < NUM_AG_SLOTS; i++) {
1657 ag->ag_fine = ag+1;
1658 ag++;