cvs commit: src/sys/modules/ipdivert Makefile
src/sys/netinetin_proto.c ip_divert.c ip_divert.h ip_fw2.c ip_fw_pfil.c
Andre Oppermann
andre at freebsd.org
Tue Oct 19 14:58:07 PDT 2004
Scott Long wrote:
>
> Andre Oppermann wrote:
> > andre 2004-10-19 21:14:57 UTC
> >
> > FreeBSD src repository
> >
> > Modified files:
> > sys/netinet in_proto.c ip_divert.c ip_divert.h
> > ip_fw2.c ip_fw_pfil.c
> > Added files:
> > sys/modules/ipdivert Makefile
> > Log:
> > Convert IPDIVERT into a loadable module. This makes use of the dynamic loadability
> > of protocols. The call to divert_packet() is done through a function pointer. All
> > semantics of IPDIVERT remain intact. If IPDIVERT is not loaded ipfw will refuse to
> > install divert rules and natd will complain about 'protocol not supported'. Once
> > it is loaded both will work and accept rules and open the divert socket. The module
> > can only be unloaded if no divert sockets are open. It does not close any divert
> > sockets when an unload is requested but will return EBUSY instead.
> >
> > Revision Changes Path
> > 1.1 +8 -0 src/sys/modules/ipdivert/Makefile (new)
> > 1.75 +0 -13 src/sys/netinet/in_proto.c
> > 1.101 +67 -8 src/sys/netinet/ip_divert.c
> > 1.4 +10 -4 src/sys/netinet/ip_divert.h
> > 1.82 +2 -4 src/sys/netinet/ip_fw2.c
> > 1.11 +13 -8 src/sys/netinet/ip_fw_pfil.c
>
> This is interesting. Have you measured performance/latency with this
> new scheme? Is it still possible to compile IPDIVERT into the kernel
> and avoid the indirect calls?
IPDIVERT can hardly be called a performance/latency critical path. The
entire copyout of the packet to userland for nat'ing and copyin again
make the function pointer indirection such a small factor that it doesn't
make any difference whatsoever.
ipfw used to be called through function pointers until I converted it to
use pfil_hooks. But even there we go though function pointers for every
packet. The same is true for the entire ip_protox[] system and the whole
socket layer going through protosw[].
--
Andre
More information about the cvs-src
mailing list