Hi there, I've been reading netlfow.c in FreeBSD-6.2 and this piece of code confuses me. 484 /* 485 * Go through hash and find our entry. If we encounter an 486 * entry, that should be expired, purge it. We do a reverse 487 * search since most active entries are first, and most 488 * searches are done on most active entries. 489 */ 490 TAILQ_FOREACH_REVERSE_SAFE(fle, &hsh->head, fhead, fle_hash, fle1) { 491 if (bcmp(&r, &fle->f.r, sizeof(struct flow_rec)) == 0) 492 break; 493 if ((INACTIVE(fle) && SMALL(fle)) || AGED(fle)) { 494 TAILQ_REMOVE(&hsh->head, fle, fle_hash); 495 expire_flow(priv, &item, fle, NG_QUEUE); 496 atomic_add_32(&priv->info.nfinfo_act_exp, 1); 497 } 498 }
+-------------+ +--------+ +--------+ +--------+ +--------+ | Bucket Head |----->| RecA |----->| RecB |----->| RecC |----->| RecD | +-------------+ +--------+ +--------+ +--------+ +--------+ In the figure above, let's say our packet matches RecC. So before the match, RecD is examined to see if it's AGED, i.e., it's lasted for too long, or if it's too small and inactive. As the match is found, the code stops searching. First, isn't INACTIVE alone enough to expire a flow? Why must INACTIVE _and_ SMALL? RecA and RecB would not be examined for expiration but since they are to the beginning of the queue and therefore actually less recently accessed, they are more likely to be INACTIVE and could be more AGED. I must be missing something, but what justifies examining RecD but not RecA and RecB? Thank you very much for your time. Wei ____________________________________________________________________________________ Be a better Heartthrob. Get better relationship answers from someone who knows. Yahoo! Answers - Check it out. http://answers.yahoo.com/dir/?link=list&sid=396545433 _______________________________________________ freebsd-net@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-net To unsubscribe, send any mail to "[EMAIL PROTECTED]"