Lines Matching refs:ag

121 ag_out(struct ag_info *ag,
129 if (ag->ag_state & AGS_SPLIT_HZ)
141 ag_cors = ag->ag_cors;
143 && ag_cors->ag_mask == ag->ag_mask<<1
144 && ag_cors->ag_dst_h == (ag->ag_dst_h & ag_cors->ag_mask)) {
145 ag_cors->ag_state |= ((ag_cors->ag_dst_h == ag->ag_dst_h)
155 if (ag->ag_state & AGS_REDUN0) {
156 if (ag->ag_state & AGS_REDUN1)
159 bit = (-ag->ag_mask) >> 1;
160 ag->ag_dst_h |= bit;
161 ag->ag_mask |= bit;
163 } else if (ag->ag_state & AGS_REDUN1) {
165 bit = (-ag->ag_mask) >> 1;
166 ag->ag_mask |= bit;
168 out(ag);
173 ag_del(struct ag_info *ag)
177 if (ag->ag_cors == 0)
178 ag_corsest = ag->ag_fine;
180 ag->ag_cors->ag_fine = ag->ag_fine;
182 if (ag->ag_fine == 0)
183 ag_finest = ag->ag_cors;
185 ag->ag_fine->ag_cors = ag->ag_cors;
187 ag->ag_fine = ag_avail;
188 ag_avail = ag;
206 struct ag_info *ag, *ag_cors;
210 for (ag = ag_finest;
211 ag != 0 && ag->ag_mask >= lim_mask;
212 ag = ag_cors) {
213 ag_cors = ag->ag_cors;
216 dst_h = ag->ag_dst_h;
220 if (!(ag->ag_state & AGS_SUPPRESS))
221 ag_out(ag, out);
230 ag_out(ag, out);
242 if (ag->ag_gate != ag_cors->ag_gate
243 && !(ag->ag_state & AGS_FINE_GATE)
245 ag_out(ag, out);
254 if (ag_cors->ag_pref <= ag->ag_pref) {
255 if (AG_IS_REDUN(ag->ag_state)
256 && ag_cors->ag_mask==ag->ag_mask<<1) {
262 if (ag->ag_tag != ag_cors->ag_tag)
264 if (ag->ag_nhop != ag_cors->ag_nhop)
272 ag_cors = ag->ag_cors;
273 ag_del(ag);
294 struct ag_info *ag, *nag, *ag_cors;
324 ag = ag_corsest;
325 while (ag != 0) {
326 if (ag->ag_mask >= mask)
339 && ag->ag_dst_h < dst
340 && (ag->ag_state & AGS_SUPPRESS)
341 && ag_cors->ag_pref <= ag->ag_pref
342 && (ag->ag_dst_h & ag_cors->ag_mask) == ag_cors->ag_dst_h
343 && (ag_cors->ag_gate == ag->ag_gate
344 || (ag->ag_state & AGS_FINE_GATE)
349 if (AG_IS_REDUN(ag->ag_state)
350 && ag_cors->ag_mask == ag->ag_mask<<1) {
356 if (ag->ag_tag != ag_cors->ag_tag)
358 if (ag->ag_nhop != ag_cors->ag_nhop)
360 ag_del(ag);
363 ag_cors = ag;
365 ag = ag_cors->ag_fine;
377 while (ag != 0
378 && ag->ag_mask == mask
379 && ((ag->ag_dst_h ^ dst) & (mask<<1)) == 0) {
386 if (ag->ag_dst_h == dst) {
398 if (pref <= ag->ag_pref) {
399 ag->ag_gate = gate;
400 ag->ag_nhop = nhop;
401 ag->ag_tag = tag;
402 ag->ag_metric = metric;
403 ag->ag_pref = pref;
404 if (ag->ag_seqno < new_seqno)
405 ag->ag_seqno = new_seqno;
406 x = ag->ag_state;
407 ag->ag_state = state;
414 if (!(ag->ag_state & AGS_IF))
415 ag->ag_state |= (state & (AGS_AGGREGATE_EITHER
429 && (ag->ag_state & AGS_SUPPRESS))
430 && !((ag->ag_state & AGS_AGGREGATE)
438 if (AG_IS_REDUN(ag->ag_state)
440 || (ag->ag_gate == gate
441 && ag->ag_pref == pref
442 && (state & ag->ag_state & AGS_AGGREGATE) != 0)) {
450 if (new_seqno < ag->ag_seqno)
451 new_seqno = ag->ag_seqno;
454 if (AG_IS_REDUN(ag->ag_state))
458 state |= (ag->ag_state & AGS_AGGREGATE_EITHER);
459 if (ag->ag_tag != tag)
461 if (ag->ag_nhop != nhop)
467 ag_del(ag);
469 } else if (ag->ag_pref >= pref
470 && (ag->ag_state & AGS_AGGREGATE)) {
477 ag->ag_dst_h = dst;
479 xaddr = ag->ag_gate;
480 ag->ag_gate = gate;
483 xaddr = ag->ag_nhop;
484 ag->ag_nhop = nhop;
487 x = ag->ag_tag;
488 ag->ag_tag = tag;
496 x = ag->ag_state;
500 ag->ag_state = state;
503 x = ag->ag_metric;
504 ag->ag_metric = metric;
507 x = ag->ag_pref;
508 ag->ag_pref = pref;
512 if (new_seqno <= ag->ag_seqno)
513 new_seqno = ag->ag_seqno;
515 ag->ag_seqno = new_seqno;
531 if (new_seqno < ag->ag_seqno)
532 new_seqno = ag->ag_seqno;
534 ag->ag_seqno = new_seqno;
541 ag = ag_corsest;
544 ag = ag_cors;
545 ag_cors = ag->ag_cors;
556 if (ag != 0
557 && ag->ag_mask < mask) {
558 ag_cors = ag;
559 ag = ag->ag_fine;
564 if (ag != 0 && ag->ag_mask == mask) {
565 ag_flush(ag->ag_dst_h, ag->ag_mask, out);
566 ag = (ag_cors == 0) ? ag_corsest : ag_cors->ag_fine;
571 if (ag == 0 && ag_cors != ag_finest)
573 if (ag_cors == 0 && ag != ag_corsest)
575 if (ag != 0 && ag->ag_cors != ag_cors)
577 if (ag_cors != 0 && ag_cors->ag_fine != ag)
597 nag->ag_fine = ag;
598 if (ag != 0)
599 ag->ag_cors = nag;
1330 kern_out(struct ag_info *ag)
1339 if (ag->ag_metric == HOPCNT_INFINITY) {
1340 k = kern_find(htonl(ag->ag_dst_h), ag->ag_mask, 0);
1344 k = kern_add(htonl(ag->ag_dst_h), ag->ag_mask);
1350 if (ag->ag_state & AGS_GATEWAY)
1352 k->k_gate = ag->ag_gate;
1353 k->k_metric = ag->ag_metric;
1361 if (k->k_gate != ag->ag_gate
1362 || k->k_metric != ag->ag_metric) {
1366 k->k_gate = ag->ag_gate;
1367 k->k_metric = ag->ag_metric;
1382 && !(ag->ag_state & AGS_GATEWAY)) {
1386 && (ag->ag_state & AGS_GATEWAY)) {
1628 struct ag_info *ag;
1637 for (ag = ag_slots, i = 1; i < NUM_AG_SLOTS; i++) {
1638 ag->ag_fine = ag+1;
1639 ag++;