Christian S.J. Peron wrote:
On  2 Jun 2004 Andre Oppermann wrote:

Christian S.J. Peron wrote:

All,

Currently, when you have any rules which contain UID/GID
constraints, ipfw will lock the pcb hash and do a lookup
to find the pcb associated with that packet -- One for each constraint.


I have written a patch in attempt to minimize the impact
of PCB related lookups for these type of firewall rules.

This patch will have the following effects on firewalls which
contain UID/GID constraints:

o Greatly reduce the locking contention associated
 with PCB lookups.

o Increase the performance of firewall in general by making
 PCB lookups O(1) rather than O(n) (where n represents
 number of UID/GID constraints in the ruleset)

It would be greatly appriciated if people who are running ipfw
rules sets containing UID/GID constraints tested this patch
and reported any success or failures.

The patch can be downloaded from:

http://people.freebsd.org/~csjp/ip_fw2_cached_ucred.patch

You can optimize it even further by directly copying the uid/gid from the ucred while you hold the INP_LOCK. There is no need to hold on to the entire ucred. It should be sufficient to do the ucred lookup only once per packet in the ipfw code. If you don't find an INPCB for the packet you'll do a negative lookup for every uid/gid rule.

I thought about this to, however in order to implement GID contraints properly, we need to use groupmember(9) which requires the entire cr_groups[16] located in the ucred. I thought it was more elegant and cheaper to avoid the memcpy(sizeof(gid_t) * NGROUPS) and stick with the mutex.

I see. Hmmm... Actually I'm only concerned that someone later misses a crfree() call and starts to leak ucred structures. ipfw is not the first place you are going to look for it. The more you can keep together in one place the better it is. This kind of error has already happend once with the initial implementation of verrevpath in ifpw. The fuction did not correctly do the ref- counting leading to a hefty rtentry leak.

--
Andre

_______________________________________________
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to