Lines Matching refs:ag

123 ag_out(struct ag_info *ag,
131 if (ag->ag_state & AGS_SPLIT_HZ)
143 ag_cors = ag->ag_cors;
145 && ag_cors->ag_mask == ag->ag_mask<<1
146 && ag_cors->ag_dst_h == (ag->ag_dst_h & ag_cors->ag_mask)) {
147 ag_cors->ag_state |= ((ag_cors->ag_dst_h == ag->ag_dst_h)
157 if (ag->ag_state & AGS_REDUN0) {
158 if (ag->ag_state & AGS_REDUN1)
161 bit = (-ag->ag_mask) >> 1;
162 ag->ag_dst_h |= bit;
163 ag->ag_mask |= bit;
165 } else if (ag->ag_state & AGS_REDUN1) {
167 bit = (-ag->ag_mask) >> 1;
168 ag->ag_mask |= bit;
170 out(ag);
175 ag_del(struct ag_info *ag)
179 if (ag->ag_cors == NULL)
180 ag_corsest = ag->ag_fine;
182 ag->ag_cors->ag_fine = ag->ag_fine;
184 if (ag->ag_fine == NULL)
185 ag_finest = ag->ag_cors;
187 ag->ag_fine->ag_cors = ag->ag_cors;
189 ag->ag_fine = ag_avail;
190 ag_avail = ag;
208 struct ag_info *ag, *ag_cors;
212 for (ag = ag_finest;
213 ag != NULL && ag->ag_mask >= lim_mask;
214 ag = ag_cors) {
215 ag_cors = ag->ag_cors;
218 dst_h = ag->ag_dst_h;
222 if (!(ag->ag_state & AGS_SUPPRESS))
223 ag_out(ag, out);
232 ag_out(ag, out);
244 if (ag->ag_gate != ag_cors->ag_gate
245 && !(ag->ag_state & AGS_FINE_GATE)
247 ag_out(ag, out);
256 if (ag_cors->ag_pref <= ag->ag_pref) {
257 if (AG_IS_REDUN(ag->ag_state)
258 && ag_cors->ag_mask==ag->ag_mask<<1) {
264 if (ag->ag_tag != ag_cors->ag_tag)
266 if (ag->ag_nhop != ag_cors->ag_nhop)
274 ag_cors = ag->ag_cors;
275 ag_del(ag);
296 struct ag_info *ag, *nag, *ag_cors;
326 ag = ag_corsest;
327 while (ag != NULL) {
328 if (ag->ag_mask >= mask)
341 && ag->ag_dst_h < dst
342 && (ag->ag_state & AGS_SUPPRESS)
343 && ag_cors->ag_pref <= ag->ag_pref
344 && (ag->ag_dst_h & ag_cors->ag_mask) == ag_cors->ag_dst_h
345 && (ag_cors->ag_gate == ag->ag_gate
346 || (ag->ag_state & AGS_FINE_GATE)
351 if (AG_IS_REDUN(ag->ag_state)
352 && ag_cors->ag_mask == ag->ag_mask<<1) {
358 if (ag->ag_tag != ag_cors->ag_tag)
360 if (ag->ag_nhop != ag_cors->ag_nhop)
362 ag_del(ag);
365 ag_cors = ag;
367 ag = ag_cors->ag_fine;
379 while (ag != NULL
380 && ag->ag_mask == mask
381 && ((ag->ag_dst_h ^ dst) & (mask<<1)) == 0) {
388 if (ag->ag_dst_h == dst) {
400 if (pref <= ag->ag_pref) {
401 ag->ag_gate = gate;
402 ag->ag_nhop = nhop;
403 ag->ag_tag = tag;
404 ag->ag_metric = metric;
405 ag->ag_pref = pref;
406 if (ag->ag_seqno < new_seqno)
407 ag->ag_seqno = new_seqno;
408 x = ag->ag_state;
409 ag->ag_state = state;
416 if (!(ag->ag_state & AGS_IF))
417 ag->ag_state |= (state & (AGS_AGGREGATE_EITHER
431 && (ag->ag_state & AGS_SUPPRESS))
432 && !((ag->ag_state & AGS_AGGREGATE)
440 if (AG_IS_REDUN(ag->ag_state)
442 || (ag->ag_gate == gate
443 && ag->ag_pref == pref
444 && (state & ag->ag_state & AGS_AGGREGATE) != 0)) {
452 if (new_seqno < ag->ag_seqno)
453 new_seqno = ag->ag_seqno;
456 if (AG_IS_REDUN(ag->ag_state))
460 state |= (ag->ag_state & AGS_AGGREGATE_EITHER);
461 if (ag->ag_tag != tag)
463 if (ag->ag_nhop != nhop)
469 ag_del(ag);
471 } else if (ag->ag_pref >= pref
472 && (ag->ag_state & AGS_AGGREGATE)) {
479 ag->ag_dst_h = dst;
481 xaddr = ag->ag_gate;
482 ag->ag_gate = gate;
485 xaddr = ag->ag_nhop;
486 ag->ag_nhop = nhop;
489 x = ag->ag_tag;
490 ag->ag_tag = tag;
498 x = ag->ag_state;
502 ag->ag_state = state;
505 x = ag->ag_metric;
506 ag->ag_metric = metric;
509 x = ag->ag_pref;
510 ag->ag_pref = pref;
514 if (new_seqno <= ag->ag_seqno)
515 new_seqno = ag->ag_seqno;
517 ag->ag_seqno = new_seqno;
533 if (new_seqno < ag->ag_seqno)
534 new_seqno = ag->ag_seqno;
536 ag->ag_seqno = new_seqno;
543 ag = ag_corsest;
546 ag = ag_cors;
547 ag_cors = ag->ag_cors;
558 if (ag != NULL
559 && ag->ag_mask < mask) {
560 ag_cors = ag;
561 ag = ag->ag_fine;
566 if (ag != NULL && ag->ag_mask == mask) {
567 ag_flush(ag->ag_dst_h, ag->ag_mask, out);
568 ag = (ag_cors == NULL) ? ag_corsest : ag_cors->ag_fine;
573 if (ag == NULL && ag_cors != ag_finest)
575 if (ag_cors == NULL && ag != ag_corsest)
577 if (ag != NULL && ag->ag_cors != ag_cors)
579 if (ag_cors != NULL && ag_cors->ag_fine != ag)
599 nag->ag_fine = ag;
600 if (ag != NULL)
601 ag->ag_cors = nag;
1341 kern_out(struct ag_info *ag)
1350 if (ag->ag_metric == HOPCNT_INFINITY) {
1351 k = kern_find(htonl(ag->ag_dst_h), ag->ag_mask, 0);
1355 k = kern_add(htonl(ag->ag_dst_h), ag->ag_mask);
1361 if (ag->ag_state & AGS_GATEWAY)
1363 k->k_gate = ag->ag_gate;
1364 k->k_metric = ag->ag_metric;
1372 if (k->k_gate != ag->ag_gate
1373 || k->k_metric != ag->ag_metric) {
1377 k->k_gate = ag->ag_gate;
1378 k->k_metric = ag->ag_metric;
1393 && !(ag->ag_state & AGS_GATEWAY)) {
1397 && (ag->ag_state & AGS_GATEWAY)) {
1639 struct ag_info *ag;
1648 for (ag = ag_slots, i = 1; i < NUM_AG_SLOTS; i++) {
1649 ag->ag_fine = ag+1;
1650 ag++;