Skip to content

a library version of FreeBSD's TCP/IP stack plus extras

Notifications You must be signed in to change notification settings

nickfajones/libuinet

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

UINET (User INET)
=============================================================================

This is a user-space port of the FreeBSD TCP/IP stack, begun with the
FreeBSD 9.1-RELEASE sources and many pieces of Kip Macy's user-space
port of an earlier version of the FreeBSD stack, libplebnet.

Unlike the stock FreeBSD TCP/IP stack, this stack can initiate and
terminate arbitrary TCP/IP connections, including those on
arbitrarily-nested VLANs.  Listen sockets can be bound to a wildcard
IP address (across everything on the wire, not just local interfaces),
wildcard port, and specific VLAN tag stacks.  L2 information for
accepted connections is available to the application.  Outbound
connections can be bound to any IP and port, as well as any MAC
address and VLAN tag stack.

This stack can also passively reconstruct TCP streams using a copy of
those streams' bidirectional packet flow.  Reconstruction can continue
even in the face of packet loss (in which case zero-filled holes in
the affected streams are reported to the application).

Packet I/O is currently accomplished via netmap or libpcap (although
the latter interface is relatively new and untested).


Building libuinet and the sample programs
=============================================================================

GNU make is used to build libuinet and its sample programs.  Under
Linux, this is simply 'make', while under FreeBSD, this is available
as gmake.  The instructions that follow refer to 'gmake'.

To build everything after a clean checkout:

gmake 

To rebuild everything from scratch at any point:

gmake clean config all

If your netmap includes are not in the system include path,

gmake NETMAP_INCLUDES=<path to netmap includes> [targets...]

The make variable DEBUG_FLAGS provides a quick way to adjust the
optimization level and debug symbol generation.  For example:

gmake DEBUG_FLAGS="-O2 -ggdb" clean config all


The currently functioning sample programs are:

echo		A loopback server
echo++		A C++ loopback server
passive         A passive reconstructor
tproxy		A transparent proxy


Notes
=============================================================================

The sysctl code (and likely more over time) uses libnv from
FreeBSD-HEAD to serialise data between processes.

Currently, the sysctl and vmstat tools that interact with a libuinet
instance are only buildable on FreeBSD hosts.

About

a library version of FreeBSD's TCP/IP stack plus extras

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 95.2%
  • Assembly 1.5%
  • C++ 1.0%
  • Shell 0.6%
  • Roff 0.6%
  • Perl 0.4%
  • Other 0.7%