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

FreeBSD Manual Pages


home | help
IPNAT(4)		   Kernel Interfaces Manual		      IPNAT(4)

       ipnat - Network Address Translation kernel interface

       #include	<netinet/ip_compat.h>
       #include	<netinet/ip_fil.h>
       #include	<netinet/ip_proxy.h>
       #include	<netinet/ip_nat.h>

       To  add	and  delete rules to the NAT list, two 'basic' ioctls are pro-
       vided for use.  The ioctl's are called as:

	    ioctl(fd, SIOCADNAT, struct	ipnat **)
	    ioctl(fd, SIOCRMNAT, struct	ipnat **)
	    ioctl(fd, SIOCGNATS, struct	natstat	**)
	    ioctl(fd, SIOCGNATL, struct	natlookup **)

       Unlike ipf(4), there is only a single list supported by the kernel  NAT
       interface.   An	inactive list which can	be swapped to is not currently

       These ioctl's are implemented as	being routing ioctls and thus the same
       rules  for  the	various	routing	ioctls and the file descriptor are em-
       ployed, mainly being that the fd	must be	that of	the device  associated
       with the	module (i.e., /dev/ipl).

       The structure used with the NAT interface is described below:

       typedef struct  ipnat   {
	       struct  ipnat   *in_next;
	       void    *in_ifp;
	       u_short in_flags;
	       u_short in_pnext;
	       u_short in_port[2];
	       struct  in_addr in_in[2];
	       struct  in_addr in_out[2];
	       struct  in_addr in_nextip;
	       int     in_space;
	       int     in_redir; /* 0 if it's a	mapping, 1 if it's a hard redir	*/
	       char    in_ifname[IFNAMSIZ];
       } ipnat_t;

       #define in_pmin	       in_port[0]      /* Also holds static redir port */
       #define in_pmax	       in_port[1]
       #define in_nip	       in_nextip.s_addr
       #define in_inip	       in_in[0].s_addr
       #define in_inmsk	       in_in[1].s_addr
       #define in_outip	       in_out[0].s_addr
       #define in_outmsk       in_out[1].s_addr

       Recognised values for in_redir:

       #define NAT_MAP	       0
       #define NAT_REDIRECT    1

       NAT statistics Statistics on the	number of packets mapped, going	in and
       out are kept, the number	of times a new	entry  is  added  and  deleted
       (through	 expiration)  to  the NAT table	and the	current	usage level of
       the NAT table.

       Pointers	to the NAT table inside	the kernel, as well as to the  top  of
       the  internal NAT lists constructed with	the SIOCADNAT ioctls.  The ta-
       ble itself is a hash table of size NAT_SIZE (default size is 367).

       To retrieve the statistics, the SIOCGNATS ioctl must be used, with  the
       appropriate structure passed by reference, as follows:
	    ioctl(fd, SIOCGNATS, struct	natstat	*)

       typedef struct  natstat {
	       u_long  ns_mapped[2];
	       u_long  ns_added;
	       u_long  ns_expire;
	       u_long  ns_inuse;
	       nat_t   ***ns_table;
	       ipnat_t *ns_list;
       } natstat_t;

       It  would be nice if there were more flexibility	when adding and	delet-
       ing filter rules.


       ipf(4), ipnat(5), ipf(8), ipnat(8), ipfstat(8)



Want to link to this manual page? Use this URL:

home | help