Skip site navigation (1)Skip section navigation (2)

FreeBSD Man Pages

Man Page or Keyword Search:
Man Architecture
Apropos Keyword Search (all sections) Output format
home | help
NG_VJC(4)	       FreeBSD Kernel Interfaces Manual		     NG_VJC(4)

NAME
     ng_vjc -- Van Jacobson compression	netgraph node type

SYNOPSIS
     #include <sys/types.h>
     #include <netinet/in.h>
     #include <netinet/in_systm.h>
     #include <netinet/ip.h>
     #include <net/slcompress.h>
     #include <netgraph/ng_vjc.h>

DESCRIPTION
     The vjc node type performs	Van Jacobson compression, which	is used	over
     PPP, SLIP,	and other point-to-point IP connections	to compress TCP	packet
     headers.  The ip hook represents the uncompressed side of the node, while
     the vjcomp, vjuncomp, and vjip hooks represent the	compressed side	of the
     node.  Packets received on	the ip will be compressed or passed through as
     appropriate.  Packets received on the other three hooks will be uncom-
     pressed as	appropriate.  This node	also supports ``always pass through''
     mode in either direction.

     Van Jacobson compression only applies to TCP packets.  Only ``normal''
     (i.e., common case) TCP packets are actually compressed.  These are out-
     put on the	vjcomp hook.  Other TCP	packets	are run	through	the state
     machine but not compressed; these appear on the vjuncomp hook.  Other
     non-TCP IP	packets	are forwarded unchanged	to vjip.

     When connecting to	a ng_ppp(4) node, the ip, vjuncomp, vjcomp, and	vjip
     hooks should be connected to the ng_ppp(4)	node's vjc_ip, vjc_vjcomp,
     vjc_vjuncomp, and vjc_ip hooks, respectively.

HOOKS
     This node type supports the following hooks:

     ip		 Upstream (uncompressed) IP packets.

     vjcomp	 Downstream compressed TCP packets.

     vjuncomp	 Downstream uncompressed TCP packets.

     vjip	 Downstream uncompressed IP packets.

CONTROL	MESSAGES
     This node type supports the generic control messages, plus	the following:

     NGM_VJC_SET_CONFIG
	  This command resets the compression state and	configures it accord-
	  ing to the supplied struct ngm_vjc_config argument.  This structure
	  contains the following fields:

	      struct ngm_vjc_config {
		u_char	 enableComp;	/* Enable compression */
		u_char	 enableDecomp;	/* Enable decompression	*/
		u_char	 maxChannel;	/* Number of outgoing channels - 1 */
		u_char	 compressCID;	/* OK to compress outgoing CID's */
	      };

	  When enableComp is set to zero, all packets received on the ip hook
	  are forwarded	unchanged out the vjip hook.  Similarly, when
	  enableDecomp is set to zero, all packets received on the vjip	hook
	  are forwarded	unchanged out the ip hook, and packets are not
	  accepted on the vjcomp and vjuncomp hooks.  When a node is first
	  created, both	compression and	decompression are disabled and the
	  node is therefore operating in bi-directional	``pass through'' mode.

	  When enabling	compression, maxChannel	should be set to the number of
	  outgoing compression channels	minus one, and is a value between 3
	  and 15, inclusive.  The compressCID field indicates whether it is OK
	  to compress the CID header field for outgoing	compressed TCP pack-
	  ets.	This value should be zero unless either	(a) it is not possible
	  for an outgoing frame	to be lost, or (b) lost	frames can be reliably
	  detected and immediately reported to the peer's decompression	engine
	  (see NGM_VJC_RECV_ERROR below).

     NGM_VJC_GET_STATE
	  This command returns the node's current state	described by the
	  struct slcompress structure, which is	defined	in <net/slcompress.h>.

     NGM_VJC_CLR_STATS
	  Clears the node statistics counters.	Statistics are also cleared
	  whenever the enableComp or enableDecomp fields are changed from zero
	  to one by a NGM_VJC_SET_CONFIG control message.

     NGM_VJC_RECV_ERROR
	  When the peer	has CID	header field compression enabled, this message
	  must be sent to the local vjc	node immediately after detecting that
	  a received frame has been lost, due to a bad checksum	or for any
	  other	reason.	 Failing to do this can	result in corrupted TCP	stream
	  data.

SHUTDOWN
     This node shuts down upon receipt of a NGM_SHUTDOWN control message, or
     when all hooks have been disconnected.

SEE ALSO
     netgraph(4), ng_iface(4), ng_ppp(4), ngctl(8)

     V.	Jacobson, Compressing TCP/IP Headers, RFC 1144.

     G.	McGregor, The PPP Internet Control Protocol (IPCP), RFC	1332.

HISTORY
     The ng_vjc	node type was implemented in FreeBSD 4.0.

AUTHORS
     Archie Cobbs <archie@FreeBSD.org>

BUGS
     As	the initialization routine in the kernel implementation	of Van Jacob-
     son compression initializes both compression and decompression at once,
     this node does not	allow compression and decompression to be enabled in
     separate operations.  In order to enable one when the other is already
     enabled, first both must be disabled, then	both enabled.  This of course
     resets the	node state.  This restriction may be lifted in a later ver-
     sion.

     When built	as a loadable kernel module, this module includes the file
     net/slcompress.c.	Although loading the module should fail	if
     net/slcompress.c already exists in	the kernel, currently it does not, and
     the duplicate copies of the file do not interfere.	 However, this may
     change in the future.

FreeBSD	9.2		       January 19, 1999			   FreeBSD 9.2

NAME | SYNOPSIS | DESCRIPTION | HOOKS | CONTROL MESSAGES | SHUTDOWN | SEE ALSO | HISTORY | AUTHORS | BUGS

Want to link to this manual page? Use this URL:
<http://www.freebsd.org/cgi/man.cgi?query=ng_vjc&sektion=4&manpath=FreeBSD+6.3-RELEASE>

home | help