netwib538_net man page on DragonFly

Man page or keyword search:  
man Server   44335 pages
apropos Keyword Search (all sections)
Output format
DragonFly logo
[printable version]

NETWIB_NET(3)							 NETWIB_NET(3)

NAME
       netwib - section net

HTML DOC
       If  you have a browser, read netwib-5.38.0-doc_html.tgz which is easier
       to read than this manpage.

PRESENTATION
       This manpage contains a concatenation of includes for section NET.

MODULE TYPES
       #ifndef NETWIB_NET_TYPES_INCLUDED
       #define NETWIB_NET_TYPES_INCLUDED 1

       /*-------------------------------------------------------------*/
       /* to store an Ethernet address */
       #define NETWIB_ETH_LEN 6
       typedef struct {
	 netwib_byte b[NETWIB_ETH_LEN];
       } netwib_eth;
       typedef const netwib_eth netwib_consteth;

       /*-------------------------------------------------------------*/
       /* to store an IPv4 address */
       #define NETWIB_IP4_LEN 4
       typedef netwib_uint32 netwib_ip4;

       /* to store an IPv6 address */
       #define NETWIB_IP6_LEN 16
       typedef struct {
	 netwib_byte b[NETWIB_IP6_LEN];
       } netwib_ip6;
       typedef const netwib_ip6 netwib_constip6;

       /* to store an IP address */
       typedef enum {
	 NETWIB_IPTYPE_UNKNOWN = 0,
	 NETWIB_IPTYPE_IP4,
	 NETWIB_IPTYPE_IP6
       } netwib_iptype;
       typedef struct {
	 netwib_iptype iptype;
	 union {
	   netwib_ip4 ip4;
	   netwib_ip6 ip6;
	 } ipvalue;
       } netwib_ip;
       typedef const netwib_ip netwib_constip;

       /*-------------------------------------------------------------*/
       /* to store a port */
       typedef netwib_uint32 netwib_port;

       #endif

MODULE DEVICE
       /*-------------------------------------------------------------*/
       /* Name : netwib_device_init_kbd
	  Description :
	    Initialize a device by the keyboard
	  Input parameter(s) :
	    message : message to print before
	    defaultdevice : default device to use if user enters nothing
	  Input/output parameter(s) :
	  Output parameter(s) :
	    *pdevice : device set with user's string
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_device_init_kbd(netwib_constbuf *pmessage,
					 netwib_constbuf *pdefaultdevice,
					 netwib_buf *pdevice);
       #define NETWIB_DEVICE_INIT_KBD_NODEF NULL

       /*-------------------------------------------------------------*/
       /* Hardware types */
       typedef enum {
	 NETWIB_DEVICE_HWTYPE_UNKNOWN = 1,
	 NETWIB_DEVICE_HWTYPE_ETHER,
	 NETWIB_DEVICE_HWTYPE_LOOPBACK,
	 NETWIB_DEVICE_HWTYPE_PPP,
	 NETWIB_DEVICE_HWTYPE_PLIP,
	 NETWIB_DEVICE_HWTYPE_SLIP
       } netwib_device_hwtype;

       /*-------------------------------------------------------------*/
       /* Name : netwib_buf_append_device_hwtype
	  Description :
	    Obtains the buf string corresponding to a hwtype.
	  Input parameter(s) :
	    type : type
	  Input/output parameter(s) :
	  Output parameter(s) :
	    *pbuf : netwib_buf set with the buf string
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_buf_append_device_hwtype(netwib_device_hwtype type,
						  netwib_buf *pbuf);

       /*-------------------------------------------------------------*/
       /* Name : netwib_device_hwtype_init_kbd
	  Description :
	    Initialize a netwib_device_hwtype with data entered
	    through keyboard.
	  Input parameter(s) :
	    *pmessage : message to print before
	    defaulthwtype : default hwtype to use if user enters
			     nothing (if NETWIB_DEVICE_HWTYPE_UNKNOWN,
			     means no default)
	  Input/output parameter(s) :
	  Output parameter(s) :
	    *phwtype : netwib_hwtype initialized
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_device_hwtype_init_kbd(netwib_constbuf *pmessage,
						netwib_device_hwtype defaulthwtype,
						netwib_device_hwtype *phwtype);
       #define NETWIB_DEVICE_HWTYPE_INIT_KBD_NODEF NETWIB_DEVICE_HWTYPE_UNKNOWN

       /*-------------------------------------------------------------*/
       /***************************************************************
	* Sniffed data is represented as specified by the DLT	      *
	* associated to packets.				      *
	* Spoofed data (at link level) also has to be represented as  *
	* DLT expects.						      *
	***************************************************************/
       /* Data-link level type codes (names from net/bpf.h). */
       typedef enum {
	 NETWIB_DEVICE_DLTTYPE_UNKNOWN = 1, /* not listed below */
	 NETWIB_DEVICE_DLTTYPE_NULL,	    /* no link-layer encapsulation */
	 NETWIB_DEVICE_DLTTYPE_EN10MB,	    /* Ethernet (10Mb) */
	 NETWIB_DEVICE_DLTTYPE_ETHER = NETWIB_DEVICE_DLTTYPE_EN10MB,
	 NETWIB_DEVICE_DLTTYPE_EN3MB,	    /* Experimental Ethernet (3Mb) */
	 NETWIB_DEVICE_DLTTYPE_AX25,	    /* Amateur Radio AX.25 */
	 NETWIB_DEVICE_DLTTYPE_PRONET,	    /* Proteon ProNET Token Ring */
	 NETWIB_DEVICE_DLTTYPE_CHAOS,	    /* Chaos */
	 NETWIB_DEVICE_DLTTYPE_IEEE802,	    /* IEEE 802 Networks */
	 NETWIB_DEVICE_DLTTYPE_ARCNET,	    /* ARCNET */
	 NETWIB_DEVICE_DLTTYPE_SLIP,	    /* Serial Line IP */
	 NETWIB_DEVICE_DLTTYPE_PPP,	    /* Point-to-point Protocol */
	 NETWIB_DEVICE_DLTTYPE_FDDI,	    /* FDDI */
	 NETWIB_DEVICE_DLTTYPE_ATM_RFC1483, /* LLC/SNAP encapsulated atm */
	 NETWIB_DEVICE_DLTTYPE_RAW,	    /* raw IPv4 or IPv6 */
	 NETWIB_DEVICE_DLTTYPE_RAW4,	    /* raw IPv4 */
	 NETWIB_DEVICE_DLTTYPE_RAW6,	    /* raw IPv6 */
	 NETWIB_DEVICE_DLTTYPE_SLIP_BSDOS,  /* BSD/OS Serial Line IP */
	 NETWIB_DEVICE_DLTTYPE_PPP_BSDOS,   /* BSD/OS Point-to-point Protocol */
	 NETWIB_DEVICE_DLTTYPE_ATM_CLIP,    /* Linux Classical-IP over ATM */
	 NETWIB_DEVICE_DLTTYPE_PPP_SERIAL,  /* PPP over serial with HDLC enc. */
	 NETWIB_DEVICE_DLTTYPE_PPP_ETHER,   /* PPP over Ethernet */
	 NETWIB_DEVICE_DLTTYPE_C_HDLC,	    /* Cisco HDLC */
	 NETWIB_DEVICE_DLTTYPE_IEEE802_11,  /* IEEE 802.11 wireless */
	 NETWIB_DEVICE_DLTTYPE_LOOP,
	 NETWIB_DEVICE_DLTTYPE_LINUX_SLL,
	 NETWIB_DEVICE_DLTTYPE_LTALK,
	 NETWIB_DEVICE_DLTTYPE_ECONET,
	 NETWIB_DEVICE_DLTTYPE_PRISM_HEADER,
	 NETWIB_DEVICE_DLTTYPE_AIRONET_HEADER,
	 NETWIB_DEVICE_DLTTYPE_USER_BEGIN = NETWIB_ENUM_USER_BEGIN
       } netwib_device_dlttype;

       /*-------------------------------------------------------------*/
       /* Name : netwib_buf_append_device_dlttype
	  Description :
	    Obtains the buf string corresponding to a hwtype.
	  Input parameter(s) :
	    type : type
	  Input/output parameter(s) :
	  Output parameter(s) :
	    *pbuf : netwib_buf set with the buf string
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_buf_append_device_dlttype(netwib_device_dlttype type,
						   netwib_buf *pbuf);

       /*-------------------------------------------------------------*/
       /* Name : netwib_device_dlttype_init_kbd
	  Description :
	    Initialize a netwib_device_dlttype with data entered
	    through keyboard.
	  Input parameter(s) :
	    *pmessage : message to print before
	    defaultdlttype : default dlttype to use if user enters
			     nothing (if NETWIB_DEVICE_DLTTYPE_UNKNOWN,
			     means no default)
	  Input/output parameter(s) :
	  Output parameter(s) :
	    *pdlttype : netwib_dlttype initialized
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_device_dlttype_init_kbd(netwib_constbuf *pmessage,
						 netwib_device_dlttype defaultdlttype,
						 netwib_device_dlttype *pdlttype);
       #define NETWIB_DEVICE_DLTTYPE_INIT_KBD_NODEF NETWIB_DEVICE_DLTTYPE_UNKNOWN

MODULE IP
       /*-------------------------------------------------------------*/
       /***************************************************************
	* A netwib_ip represents an IP address.			      *
	***************************************************************/

       /*-------------------------------------------------------------*/
       /* Name : netwib_ip_init_ip4_fields
	  Description :
	    Initialize an netwib_ip address.
	  Input parameter(s) :
	    a,b,c,d : bytes of the IP address
	  Input/output parameter(s) :
	  Output parameter(s) :
	    *pip : netwib_ip set with a.b.c.d
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_ip_init_ip4_fields(netwib_byte a,
					    netwib_byte b,
					    netwib_byte c,
					    netwib_byte d,
					    netwib_ip *pip);

       /*-------------------------------------------------------------*/
       /* Name : netwib_ip_init_ip4
	  Description :
	    Initialize an netwib_ip address from an netwib_ip4.
	  Input parameter(s) :
	    ip4 : netwib_ip4 address
	  Input/output parameter(s) :
	  Output parameter(s) :
	    *pip : netwib_ip set
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_ip_init_ip4(netwib_ip4 ip4,
				     netwib_ip *pip);

       /*-------------------------------------------------------------*/
       /* Name : netwib_ip4_init_ip
	  Description :
	    Initialize an netwib_ip4 address from an netwib_ip.
	  Input parameter(s) :
	    ip : netwib_ip address
	  Input/output parameter(s) :
	  Output parameter(s) :
	    *pip4 : netwib_ip4 set
	  Normal return values :
	    NETWIB_ERR_OK : ok
	    NETWIB_ERR_NOTCONVERTED : the address could not be represented
       */
       netwib_err netwib_ip4_init_ip(netwib_constip *pip,
				     netwib_ip4 *pip4);

       /*-------------------------------------------------------------*/
       /* Name : netwib_ip_init_ip6_fields
	  Description :
	    Initialize an netwib_ip address.
	  Input parameter(s) :
	    a,b,c,d : "aaaa:aaaa:bbbb:bbbb:cccc:cccc:dddd:dddd"
	  Input/output parameter(s) :
	  Output parameter(s) :
	    *pip : netwib_ip set with "aaaa:aaaa:bbbb:b..."
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_ip_init_ip6_fields(netwib_uint32 a,
					    netwib_uint32 b,
					    netwib_uint32 c,
					    netwib_uint32 d,
					    netwib_ip *pip);

       /*-------------------------------------------------------------*/
       /* Name : netwib_ip_init_ip6
	  Description :
	    Initialize an netwib_ip address from an netwib_ip6.
	  Input parameter(s) :
	    ip6 : netwib_ip6 address
	  Input/output parameter(s) :
	  Output parameter(s) :
	    *pip : netwib_ip set
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_ip_init_ip6(netwib_constip6 *pip6,
				     netwib_ip *pip);

       /*-------------------------------------------------------------*/
       /* Name : netwib_ip6_init_ip
	  Description :
	    Initialize an netwib_ip6 address from an netwib_ip.
	  Input parameter(s) :
	    ip : netwib_ip address
	  Input/output parameter(s) :
	  Output parameter(s) :
	    *pip6 : netwib_ip6 set
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_ip6_init_ip(netwib_constip *pip,
				     netwib_ip6 *pip6);

       /*-------------------------------------------------------------*/
       typedef enum {
	 NETWIB_IP_DECODETYPE_IP4 = 1, /* "1.2.3.4" only */
	 NETWIB_IP_DECODETYPE_IP6,     /* "aaaa:bbbb:..." only */
	 NETWIB_IP_DECODETYPE_IP,      /* try IP4 then IP6 */
	 NETWIB_IP_DECODETYPE_HN4,     /* server.example.com->IPv4 only */
	 NETWIB_IP_DECODETYPE_HN6,     /* server.example.com->IPv4 only */
	 NETWIB_IP_DECODETYPE_HN,      /* try HN4 then HN6 */
	 NETWIB_IP_DECODETYPE_IP4HN4,  /* if IP4 does not work, use HN4 */
	 NETWIB_IP_DECODETYPE_IP6HN6,  /* if IP6 does not work, use HN6 */
	 NETWIB_IP_DECODETYPE_IPHN,    /* try IP, then HN */
	 NETWIB_IP_DECODETYPE_BEST = NETWIB_IP_DECODETYPE_IPHN	/* best */
       } netwib_ip_decodetype;

       /*-------------------------------------------------------------*/
       /* Name : netwib_ip_init_buf
	  Description :
	    Convert a string "1.2.3.4", "aaaa:bbbb:..." or a
	    hostname to a netwib_ip. To convert a hostname resolving
	    to several IP addresses, function netwib_ips_add_buf
	    has to be used instead.
	  Input parameter(s) :
	    *pbuf : string to convert
	  Input/output parameter(s) :
	  Output parameter(s) :
	    *pip : netwib_ip set
	  Normal return values :
	    NETWIB_ERR_OK : ok
	    NETWIB_ERR_NOTCONVERTED : the address could not be resolved
       */
       netwib_err netwib_ip_init_buf(netwib_constbuf *pbuf,
				     netwib_ip_decodetype decodetype,
				     netwib_ip *pip);
       #define netwib_ip_init_buf_best(pbuf,pip) netwib_ip_init_buf(pbuf,NETWIB_IP_DECODETYPE_BEST,pip)

       /*-------------------------------------------------------------*/
       /* Name : netwib_ip_init_eth
	  Description :
	    Convert a netwib_eth to a netwib_ip.
	  Input parameter(s) :
	    eth : netwib_eth to convert
	  Input/output parameter(s) :
	  Output parameter(s) :
	    *pip : netwib_ip set with eth value
	  Normal return values :
	    NETWIB_ERR_OK : ok
	    NETWIB_ERR_NOTCONVERTED : the address could not be resolved
	  Note :
	    This function does not currently support IPv6. It have
	    to be finished.
       */
       netwib_err netwib_ip_init_eth(netwib_consteth *peth,
				     netwib_ip *pip);

       /*-------------------------------------------------------------*/
       /* Name : netwib_ip_init_kbd
	  Description :
	    Initialize an netwib_ip with the address entered by the
	    user through the keyboard
	  Input parameter(s) :
	    message : message to print before
	    defaulthn : default hostname or ip address to use if
			user enters nothing. If NULL, there is no default
	  Input/output parameter(s) :
	  Output parameter(s) :
	    *pip : netwib_ip set with user's string
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_ip_init_kbd(netwib_constbuf *pmessage,
				     netwib_constbuf *pdefaulthn,
				     netwib_ip *pip);
       #define NETWIB_IP_INIT_KBD_NODEF NULL

       /*-------------------------------------------------------------*/
       /* Name : netwib_ip_cmp
	  Description :
	    Compare two netwib_ip.
	  Input parameter(s) :
	    ip1 : netwib_ip to compare with ip2
	    ip2 : netwib_ip to compare with ip1
	  Input/output parameter(s) :
	  Output parameter(s) :
	    *pcmp :
	      NETWIB_CMP_LT : ip1<ip2
	      NETWIB_CMP_EQ : if ip1 and ip2 are equal
	      NETWIB_CMP_GT : ip1>ip2
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_ip_cmp(netwib_constip *pip1,
				netwib_constip *pip2,
				netwib_cmp *pcmp);

       /*-------------------------------------------------------------*/
       typedef enum {
	 NETWIB_IP_ENCODETYPE_IP = 1,	/* "1.2.3.4" */
	 NETWIB_IP_ENCODETYPE_HN,	/* server.example.com */
	 NETWIB_IP_ENCODETYPE_HNIP,	/* if HN does not work, use IP */
	 NETWIB_IP_ENCODETYPE_HNS,	/* "host1,host2,etc." */
	 NETWIB_IP_ENCODETYPE_BEST = NETWIB_IP_ENCODETYPE_HNIP /* best */
       } netwib_ip_encodetype;

       /*-------------------------------------------------------------*/
       /* Name : netwib_buf_append_ip
	  Description :
	    Append a string representing a netwib_ip.
	  Input parameter(s) :
	    ip : netwib_ip to append
	    encodetype : encodetype to use
	  Input/output parameter(s) :
	    pbuf : buffer updated
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
	    NETWIB_ERR_NOTCONVERTED : the address could not be resolved
       */
       netwib_err netwib_buf_append_ip(netwib_constip *pip,
				       netwib_ip_encodetype encodetype,
				       netwib_buf *pbuf);

       /*-------------------------------------------------------------*/
       /* Name : netwib_buf_append_iptype
	  Description :
	    Obtains the buf string corresponding to a type.
	  Input parameter(s) :
	    type : type
	  Input/output parameter(s) :
	  Output parameter(s) :
	    *pbuf : netwib_buf set with the buf string
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_buf_append_iptype(netwib_iptype type,
					   netwib_buf *pbuf);

       /*-------------------------------------------------------------*/
       /* Name : netwib_iptype_init_kbd
	  Description :
	    Initialize a netwib_iptype with data entered
	    through keyboard.
	  Input parameter(s) :
	    *pmessage : message to print before
	    defaulttype : default type to use if user enters
			  nothing (if NETWIB_IPTYPE_UNKNOWN means
			  no default)
	  Input/output parameter(s) :
	  Output parameter(s) :
	    *phwtype : netwib_hwtype initialized
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_iptype_init_kbd(netwib_constbuf *pmessage,
					 netwib_iptype defaulttype,
					 netwib_iptype *ptype);
       #define NETWIB_IPTYPE_INIT_KBD_NODEF NETWIB_IPTYPE_UNKNOWN

MODULE ETH
       /*-------------------------------------------------------------*/
       /***************************************************************
	* A netwib_eth represents an Ethernet address.		      *
	* You can init it with a netwib_eth_init_xyz function or with:*
	*   netwib_eth eth, eth2;				      *
	*   eth.b[0] = 0x01; eth.b[1] = 0x02; eth.b[2] = 0x03; ...    *
	*   netwib_c_memcpy(eth.b, array, NETWIB_ETH_LEN);	      *
	*   netwib_c_memset(eth.b, 0, NETWIB_ETH_LEN);		      *
	*   eth2 = eth1;					      *
	***************************************************************/

       /*-------------------------------------------------------------*/
       /* Name : netwib_eth_init_fields
	  Description :
	    Initialize an netwib_eth address.
	  Input parameter(s) :
	    a,b,c,d,e,f : bytes of the Ethernet address
	  Input/output parameter(s) :
	  Output parameter(s) :
	    *peth : netwib_eth set with a:b:c:d:e:f
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_eth_init_fields(netwib_byte a,
					 netwib_byte b,
					 netwib_byte c,
					 netwib_byte d,
					 netwib_byte e,
					 netwib_byte f,
					 netwib_eth *peth);

       /*-------------------------------------------------------------*/
       /* Name : netwib_eth_init_buf
	  Description :
	    Convert the string "aa:bb:cc:dd:ee:ff" to a netwib_eth.
	  Input parameter(s) :
	    *pbuf : string
	  Input/output parameter(s) :
	  Output parameter(s) :
	    *peth : netwib_eth set
	  Normal return values :
	    NETWIB_ERR_OK : ok
	    NETWIB_ERR_NOTCONVERTED : format is not "aa:bb:cc:dd:ee:ff"
       */
       netwib_err netwib_eth_init_buf(netwib_constbuf *pbuf,
				      netwib_eth *peth);

       /*-------------------------------------------------------------*/
       /* Name : netwib_eth_init_ip
	  Description :
	    Convert a netwib_ip address to a netwib_eth.
	  Input parameter(s) :
	    ip : IP address
	  Input/output parameter(s) :
	  Output parameter(s) :
	    *peth : netwib_eth set with ip
	  Normal return values :
	    NETWIB_ERR_OK : ok
	    NETWIB_ERR_OKUNRESOLVED : the address could not be resolved
       */
       netwib_err netwib_eth_init_ip(netwib_constip *pip,
				     netwib_eth *peth);

       /*-------------------------------------------------------------*/
       /* Name : netwib_eth_init_kbd
	  Description :
	    Initialize an netwib_eth with the address entered by the
	    user through the keyboard
	  Input parameter(s) :
	    message : message to print before
	    *pdefaulteth : default eth to use if user enters nothing
			   if NULL, there is no default
	  Input/output parameter(s) :
	  Output parameter(s) :
	    *peth : netwib_eth set with user's string
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_eth_init_kbd(netwib_constbuf *pmessage,
				      netwib_consteth *pdefaulteth,
				      netwib_eth *peth);
       #define NETWIB_ETH_INIT_KBD_NODEF NULL

       /*-------------------------------------------------------------*/
       /* Name : netwib_eth_cmp
	  Description :
	    Compare two netwib_eth.
	  Input parameter(s) :
	    eth1 : netwib_eth to compare with eth2
	    eth2 : netwib_eth to compare with eth1
	  Input/output parameter(s) :
	  Output parameter(s) :
	    *pcmp :
	      NETWIB_CMP_LT : eth1<eth2
	      NETWIB_CMP_EQ : if eth1 and eth2 are equal
	      NETWIB_CMP_GT : eth1>eth2
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_eth_cmp(netwib_consteth *peth1,
				 netwib_consteth *peth2,
				 netwib_cmp *pcmp);

       /*-------------------------------------------------------------*/
       /* Name : netwib_buf_append_eth
	  Description :
	    Append a string representing a netwib_eth.
	  Input parameter(s) :
	    eth : netwib_eth to append
	  Input/output parameter(s) :
	    pbuf : buffer updated
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_buf_append_eth(netwib_consteth *peth,
					netwib_buf *pbuf);

MODULE PORT
       /*-------------------------------------------------------------*/
       /* Name : netwib_port_init_kbd
	  Description :
	    Initialize a netwib_port with data entered through keyboard.
	  Input parameter(s) :
	    *pmessage : message to print before
	    min : minvalue which can be entered (if 0 no min)
	    max : maxvalue which can be entered (if 0xFFFFFFFFu no max)
	    defaultport : default port to use if user enters nothing
			  if 0xFFFFFFFFu, there is no default
	  Input/output parameter(s) :
	  Output parameter(s) :
	    *pport : netwib_port initialized
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_port_init_kbd(netwib_constbuf *pmessage,
				       netwib_port min,
				       netwib_port max,
				       netwib_port defaultport,
				       netwib_port *pport);
       #define NETWIB_PORT_INIT_KBD_NOMIN 0
       #define NETWIB_PORT_INIT_KBD_NOMAX 0xFFFFFFFFu
       #define NETWIB_PORT_INIT_KBD_NODEF 0xFFFFFFFFu

       /*-------------------------------------------------------------*/
       /* Name : netwib_port_init_buf
	  Description :
	    Convert a string "123" to a netwib_port.
	  Input parameter(s) :
	    *pbuf : string to convert
	  Input/output parameter(s) :
	  Output parameter(s) :
	    *pport : netwib_port set
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_port_init_buf(netwib_constbuf *pbuf,
				       netwib_port *pport);

       /*-------------------------------------------------------------*/
       /* Name : netwib_buf_append_port
	  Description :
	    Append a string representing a netwib_port.
	  Input parameter(s) :
	    port : netwib_port to append
	  Input/output parameter(s) :
	    pbuf : buffer updated
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_buf_append_port(netwib_port port,
					 netwib_buf *pbuf);

MODULE IPS
       /*-------------------------------------------------------------*/
       /***************************************************************
	* An IP range is of the form :				      *
	*				    ip4inf     ip4sup	      *
	*   1.2.3.4		     :	   1.2.3.4     1.2.3.4	      *
	*   1.2.3.4-5.6.7.8	     :	   1.2.3.4     5.6.7.8	      *
	*   1.2.3.0/255.255.255.0    :	   1.2.3.0   1.2.3.255	      *
	*   1.2.3.0/24		     :	   1.2.3.0   1.2.3.255	      *
	*   1.2.3/255.255.255.0	     :	   1.2.3.0   1.2.3.255	      *
	*   1.2.3/24		     :	   1.2.3.0   1.2.3.255	      *
	*   1.2.3.0%255.255.255.O    :	   1.2.3.1   1.2.3.254	      *
	*   1.2.3.0%24		     :	   1.2.3.1   1.2.3.254	      *
	*   1.2.3%255.255.255.O	     :	   1.2.3.1   1.2.3.254	      *
	*   1.2.3%24		     :	   1.2.3.1   1.2.3.254	      *
	*   fec0:0:0:1::1	     :	fec0:0:0:1::1 fec0:0:0:1::1   *
	* Notes :						      *
	*  - '%' has the same meaning as '/', except that the	      *
	*    broadcast addresses are excluded from range.	      *
	*  - It is possible to use a hostname range as input. In this *
	*    case the separator is '=' (because '-' is a valid	      *
	*    hostname separator).				      *
	*							      *
	* An netwib_ips is of the form :			      *
	*   ip,ip,iprange,iprange				      *
	*   all,!ip,!iprange					      *
	*							      *
	* Complete examples :					      *
	*   1.2.3.4						      *
	*   1.2.3.4-1.2.3.5					      *
	*   1.2.3.4,5.6.7.8					      *
	*   1.2.3.4,1.2.3.56-1.2.3.58				      *
	*   all,!1.2.3.4,!1.2.4.4-1.2.4.6			      *
	*   hostname						      *
	*   host1=host2						      *
	*   host1,host2						      *
	***************************************************************/

       /*-------------------------------------------------------------*/
       /***************************************************************
	* Those functions ignores following error cases :	      *
	*  - if we try to add a value already in the list	      *
	*  - if we try to remove a value not in the list	      *
	***************************************************************/

       /*-------------------------------------------------------------*/
       typedef struct netwib_ips netwib_ips;
       typedef const netwib_ips netwib_constips;

       /*-------------------------------------------------------------*/
       /* Name : netwib_ips_init
	  Description :
	    Initialize a netwib_ips used to store IP list.
	  Input parameter(s) :
	    inittype : if future added items will be sorted and/or unique
	  Input/output parameter(s) :
	  Output parameter(s) :
	    **ppips : netwib_ips allocated and initialized
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       typedef enum {
	 NETWIB_IPS_INITTYPE_SORTUNIQ = 1, /* sorted and unique */
	 NETWIB_IPS_INITTYPE_NOTSORTUNIQ = 2, /* not sorted and unique */
	 NETWIB_IPS_INITTYPE_NOTSORTNOTUNIQ = 3 /* not sorted and not
						   unique (duplicates
						   are not removed) */
       } netwib_ips_inittype;
       netwib_err netwib_ips_init(netwib_ips_inittype inittype,
				  netwib_ips **ppips);
       #define netwib_ips_initdefault(ppips) netwib_ips_init(NETWIB_IPS_INITTYPE_SORTUNIQ,ppips)

       /*-------------------------------------------------------------*/
       /* Name : netwib_ips_close
	  Description :
	    Close a netwib_ips.
	  Input parameter(s) :
	  Input/output parameter(s) :
	    **ppips : netwib_ips closed
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_ips_close(netwib_ips **ppips);

       /*-------------------------------------------------------------*/
       /* Name : netwib_ips_add_ip
	  Description :
	    Add an address to the netwib_ips.
	  Input parameter(s) :
	    ip : address to add
	  Input/output parameter(s) :
	    *pips : netwib_ips where to work
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_ips_add_ip(netwib_ips *pips,
				    netwib_constip *pip);

       /*-------------------------------------------------------------*/
       /* Name : netwib_ips_add_iprange
	  Description :
	    Add a range of addresses to the netwib_ips.
	  Input parameter(s) :
	    infip : inferior ip
	    supip : superior ip
	  Input/output parameter(s) :
	    *pips : netwib_ips where to work
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_ips_add_iprange(netwib_ips *pips,
					 netwib_constip *pinfip,
					 netwib_constip *psupip);

       /*-------------------------------------------------------------*/
       /* Name : netwib_ips_add_ips
	  Description :
	    Add a list of addresses to the netwib_ips.
	  Input parameter(s) :
	    *pipstoadd : netwib_ips to add
	  Input/output parameter(s) :
	    *pips : netwib_ips where to work
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_ips_add_ips(netwib_ips *pips,
				     netwib_constips *pipstoadd);

       /*-------------------------------------------------------------*/
       /* Name : netwib_ips_add_buf
	  Description :
	    Update a netwib_ips with a string like "1.2.3.4-1.2.3.5".
	  Input parameter(s) :
	    pbuf : buffer containing string
	  Input/output parameter(s) :
	    *pips : netwib_ips updated
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
	  Note :
	    If an error occurs during insertion, result will only
	    contain partial data. It's developer's job to use a
	    temporary netwib_ips to deal with such errors.
       */
       netwib_err netwib_ips_add_buf(netwib_ips *pips,
				     netwib_constbuf *pbuf);

       /*-------------------------------------------------------------*/
       /* Name : netwib_ips_add_kbd
	  Description :
	    Update a netwib_ips with data entered through keyboard.
	  Input parameter(s) :
	    *pmessage : message to print before
	    *pdefaultlist : default list to use if user enters nothing
			    if NULL, there is no default
	  Input/output parameter(s) :
	    *pips : netwib_ips updated
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_ips_add_kbd(netwib_ips *pips,
				     netwib_constbuf *pmessage,
				     netwib_constbuf *pdefaultlist);

       /*-------------------------------------------------------------*/
       /* Name : netwib_ips_del_ip
	  Description :
	    Del an address to the netwib_ips.
	  Input parameter(s) :
	    ip : address to delete
	  Input/output parameter(s) :
	    *pips : netwib_ips where to work
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_ips_del_ip(netwib_ips *pips,
				    netwib_constip *pip);

       /*-------------------------------------------------------------*/
       /* Name : netwib_ips_del_iprange
	  Description :
	    Del a range of addresses to the netwib_ips.
	  Input parameter(s) :
	    infip : inferior ip
	    supip : superior ip
	  Input/output parameter(s) :
	    *pips : netwib_ips where to work
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_ips_del_iprange(netwib_ips *pips,
					 netwib_constip *pinfip,
					 netwib_constip *psupip);

       /*-------------------------------------------------------------*/
       /* Name : netwib_ips_del_ips
	  Description :
	    Remove a list of addresses to the netwib_ips.
	  Input parameter(s) :
	    *pipstodel : netwib_ips to remove
	  Input/output parameter(s) :
	    *pips : netwib_ips where to work
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_ips_del_ips(netwib_ips *pips,
				     netwib_constips *pipstodel);

       /*-------------------------------------------------------------*/
       /* Name : netwib_ips_contains_xyz
	  Description :
	    Check if a netwib_ip is in the list.
	  Input parameter(s) :
	    ip : netwib_ip to find
	  Input/output parameter(s) :
	    *pips : netwib_ips containing the list of addresses
	  Output parameter(s) :
	    *pyes : true if netwib_ip is found
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_ips_contains_ip(netwib_constips *pips,
					 netwib_constip *pip,
					 netwib_bool *pyes);
       netwib_err netwib_ips_contains_iprange(netwib_constips *pips,
					      netwib_constip *pinfip,
					      netwib_constip *psupip,
					      netwib_bool *pyes);

       /*-------------------------------------------------------------*/
       typedef enum {
	 NETWIB_IPS_ENCODETYPE_HNRANGE = 1,/* "host1=host2,etc." */
	 NETWIB_IPS_ENCODETYPE_IPRANGE,	   /* "1.2.3.4-1.2.3.5,etc." */
	 NETWIB_IPS_ENCODETYPE_IPNUMBER,   /* "1.1.1.0/24,etc." */
	 NETWIB_IPS_ENCODETYPE_IPMASK,	   /* "1.1.1.0/255.255.255.255" */
	 NETWIB_IPS_ENCODETYPE_HNBEST = NETWIB_IPS_ENCODETYPE_HNRANGE,
	 NETWIB_IPS_ENCODETYPE_IPBEST = NETWIB_IPS_ENCODETYPE_IPRANGE,
	 NETWIB_IPS_ENCODETYPE_BEST = NETWIB_IPS_ENCODETYPE_IPBEST
       } netwib_ips_encodetype;

       /*-------------------------------------------------------------*/
       /* Name : netwib_buf_append_ips
	  Description :
	    Append a string representing a netwib_ips.
	  Input parameter(s) :
	    *pips : netwib_ips to append
	  Input/output parameter(s) :
	    pbuf : buffer updated
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_buf_append_ips(netwib_constips *pips,
					netwib_ips_encodetype encodetype,
					netwib_buf *pbuf);

MODULE IPSI
       /*-------------------------------------------------------------*/
       typedef struct netwib_ips_index netwib_ips_index;

       /*-------------------------------------------------------------*/
       /* Name : netwib_ips_index_init
	  Description :
	    Initialize a netwib_ips_index used to loop through
	    a netwib_ips.
	  Input parameter(s) :
	  Input/output parameter(s) :
	  Output parameter(s) :
	    **ppipsindex : netwib_ips_index allocated and initialized
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_ips_index_init(netwib_constips *pips,
					netwib_ips_index **ppipsindex);

       /*-------------------------------------------------------------*/
       /* Name : netwib_ips_index_close
	  Description :
	    Close a netwib_ipsindex.
	  Input parameter(s) :
	  Input/output parameter(s) :
	    **ppipsindex : netwib_ips_index closed
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_ips_index_close(netwib_ips_index **ppipsindex);

       /*-------------------------------------------------------------*/
       /* Types to control a netwib_ips_index */
       typedef enum {
	 NETWIB_IPS_INDEX_CTLTYPE_REWIND = 1,  /* position at beginning */
	 NETWIB_IPS_INDEX_CTLTYPE_INDEX	       /* reset with index pos */
       } netwib_ips_index_ctltype;
       /* Those functions permit to set/get parameters (pointer and
	  integer) about a netwib_ips_index. It should not be used directly,
	  but by the defines.
       */
       netwib_err netwib_ips_index_ctl_set(netwib_ips_index *pipsindex,
					   netwib_ips_index_ctltype type,
					   netwib_ptr p,
					   netwib_uint32 ui);
       netwib_err netwib_ips_index_ctl_get(netwib_ips_index *pipsindex,
					   netwib_ips_index_ctltype type,
					   netwib_ptr p,
					   netwib_uint32 *pui);

       /*-------------------------------------------------------------*/
       /* netwib_err f(netwib_ips_index *pipsindex); */
       #define netwib_ips_index_ctl_set_rewind(pipsindex) netwib_ips_index_ctl_set(pipsindex,NETWIB_IPS_INDEX_CTLTYPE_REWIND,NULL,0)
       /* netwib_err f(netwib_ips_index *pipsindex,netwib_ips_index *pipsindexref);*/
       #define netwib_ips_index_ctl_set_index(pipsindex,pipsindexref) netwib_ips_index_ctl_set(pipsindex,NETWIB_IPS_INDEX_CTLTYPE_INDEX,pipsindexref,0)

       /*-------------------------------------------------------------*/
       /* Name : netwib_ips_index_next_ip
	  Description :
	    Get the next netwib_ip in the list.
	  Input parameter(s) :
	  Input/output parameter(s) :
	    *pipsindex : netwib_ips_index
	  Output parameter(s) :
	    *pip : next netwib_ip
	  Normal return values :
	    NETWIB_ERR_OK : ok
	    NETWIB_ERR_DATAEND : end of the list reached
	  Note :
	    If one thread changes the netwib_ips between two calls,
	    the next result might be incorrect. Developer have to
	    lock the entire loop (going through each item), or to
	    copy the netwib_ips and to loop on the copy.
       */
       netwib_err netwib_ips_index_next_ip(netwib_ips_index *pipsindex,
					   netwib_ip *pip);
       netwib_err netwib_ips_index_next_iprange(netwib_ips_index *pipsindex,
						netwib_ip *pinfip,
						netwib_ip *psupip);

       /*-------------------------------------------------------------*/
       /* Name : netwib_ips_index_this_ip
	  Description :
	    Re-give the last netwib_ip in the list.
	  Input parameter(s) :
	  Input/output parameter(s) :
	    *pipsindex : netwib_ips_index
	  Output parameter(s) :
	    *pip : next netwib_ip
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_ips_index_this_ip(netwib_ips_index *pipsindex,
					   netwib_ip *pip);
       netwib_err netwib_ips_index_this_iprange(netwib_ips_index *pipsindex,
						netwib_ip *pinfip,
						netwib_ip *psupip);

       /*-------------------------------------------------------------*/
       /* Name : netwib_ips_index_this_del
	  Description :
	    Delete the last given value by a netwib_ips_index_next
	    function.
	  Input parameter(s) :
	  Input/output parameter(s) :
	    *pipsindex : netwib_ips_index
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_ips_index_this_del(netwib_ips_index *pipsindex);

MODULE ETHS
       /*-------------------------------------------------------------*/
       /***************************************************************
	* An Ethernet range is of the form :			      *
	*				     ethinf	  ethsup      *
	*   a:b:c:d:e:f			 : a:b:c:d:e:f	a:b:c:d:e:f   *
	*   a:b:c:d:e:f-a:b:c:d:f:f	 : a:b:c:d:e:f	a:b:c:d:f:f   *
	*   a:b:c:d:e:0/40		 : a:b:c:d:e:0	a:b:c:d:e:f   *
	*   a:b:c:d:e:0%40		 : a:b:c:d:e:1	a:b:c:d:e:e   *
	*   a:b:c:d:e:0/ff:ff:ff:ff:ff:0 : a:b:c:d:e:0	a:b:c:d:e:f   *
	* Notes :						      *
	*  - '%' has the same meaning as '/', except that the	      *
	*    broadcast addresses are excluded from range.	      *
	*							      *
	* A netwib_eths is of the form :			      *
	*   eth,eth,ethrange,ethrange				      *
	*   all,!eth,!ethrange					      *
	*							      *
	* Complete examples :					      *
	*   a:b:c:d:e:f						      *
	*   a:b:c:d:e:f-a:b:c:d:f:f				      *
	*   a:b:c:d:e:f,a:b:c:d:f:f				      *
	*   1:2:3:4:5:6,a:b:c:d:e:f-a:b:c:d:f:f			      *
	*   all,!1:2:3:4:5:6,!a:b:c:d:e:f-a:b:c:d:f:f		      *
	***************************************************************/

       /*-------------------------------------------------------------*/
       /***************************************************************
	* Those functions ignores following error cases :	      *
	*  - if we try to add a value already in the list	      *
	*  - if we try to remove a value not in the list	      *
	***************************************************************/

       /*-------------------------------------------------------------*/
       typedef struct netwib_eths netwib_eths;
       typedef const netwib_eths netwib_consteths;

       /*-------------------------------------------------------------*/
       /* Name : netwib_eths_init
	  Description :
	    Initialize a netwib_eths used to store several Ethernet
	    addresses.
	  Input parameter(s) :
	    inittype : if future added items will be sorted and/or unique
	  Input/output parameter(s) :
	  Output parameter(s) :
	    **ppeths : netwib_eths allocated and initialized
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       typedef enum {
	 NETWIB_ETHS_INITTYPE_SORTUNIQ = 1, /* sorted and unique */
	 NETWIB_ETHS_INITTYPE_NOTSORTUNIQ = 2, /* not sorted and unique */
	 NETWIB_ETHS_INITTYPE_NOTSORTNOTUNIQ = 3 /* not sorted and not
						    unique (duplicates
						    are not removed) */
       } netwib_eths_inittype;
       netwib_err netwib_eths_init(netwib_eths_inittype inittype,
				   netwib_eths **ppeths);
       #define netwib_eths_initdefault(ppeths) netwib_eths_init(NETWIB_ETHS_INITTYPE_SORTUNIQ,ppeths)

       /*-------------------------------------------------------------*/
       /* Name : netwib_eths_close
	  Description :
	    Close a netwib_eths.
	  Input parameter(s) :
	  Input/output parameter(s) :
	    **ppeths : netwib_eths closed
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_eths_close(netwib_eths **ppeths);

       /*-------------------------------------------------------------*/
       /* Name : netwib_eths_add_eth
	  Description :
	    Add an address to the netwib_eths.
	  Input parameter(s) :
	    eth : address to add
	  Input/output parameter(s) :
	    *peths : netwib_eths where to work
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_eths_add_eth(netwib_eths *peths,
				      netwib_consteth *peth);

       /*-------------------------------------------------------------*/
       /* Name : netwib_eths_add_ethrange
	  Description :
	    Add a range of addresses to the netwib_eths.
	  Input parameter(s) :
	    infeth : inferior eth
	    supeth : superior eth
	  Input/output parameter(s) :
	    *peths : netwib_eths where to work
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_eths_add_ethrange(netwib_eths *peths,
					   netwib_consteth *pinfeth,
					   netwib_consteth *psupeth);

       /*-------------------------------------------------------------*/
       /* Name : netwib_eths_add_eths
	  Description :
	    Add a list of addresses to the netwib_eths.
	  Input parameter(s) :
	    *pethstoadd : netwib_eths to add
	  Input/output parameter(s) :
	    *peths : netwib_eths where to work
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
	  Note :
	    If an error occurs during insertion, result will only
	    contain partial data. It's developer's job to use a
	    temporary netwib_eths to deal with such errors.
       */
       netwib_err netwib_eths_add_eths(netwib_eths *peths,
				       netwib_consteths *pethstoadd);

       /*-------------------------------------------------------------*/
       /* Name : netwib_eths_add_buf
	  Description :
	    Add a list represented as a string like
	    "aa:bb:cc:dd:ee:ff-aa:bb:cc:dd:ff:ff".
	  Input parameter(s) :
	    *pbuf : an Ethernet string
	  Input/output parameter(s) :
	    *peths : netwib_eths updated
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_eths_add_buf(netwib_eths *peths,
				      netwib_constbuf *pbuf);

       /*-------------------------------------------------------------*/
       /* Name : netwib_eths_add_kbd
	  Description :
	    Update a list with data entered through keyboard.
	  Input parameter(s) :
	    message : message to print before
	   defaultlist : default list to use if user enters nothing
			 if NULL, there is no default
	  Input/output parameter(s) :
	  Output parameter(s) :
	    *peths : netwib_eths updated
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_eths_add_kbd(netwib_eths *peths,
				      netwib_constbuf *pmessage,
				      netwib_constbuf *pdefaultlist);

       /*-------------------------------------------------------------*/
       /* Name : netwib_eths_del_eth
	  Description :
	    Del an address to the netwib_eths.
	  Input parameter(s) :
	    eth : address to delete
	  Input/output parameter(s) :
	    *peths : netwib_eths where to work
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_eths_del_eth(netwib_eths *peths,
				      netwib_consteth *peth);

       /*-------------------------------------------------------------*/
       /* Name : netwib_eths_del_ethrange
	  Description :
	    Del a range of addresses to the netwib_eths.
	  Input parameter(s) :
	    infeth : inferior eth
	    supeth : superior eth
	  Input/output parameter(s) :
	    *peths : netwib_eths where to work
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_eths_del_ethrange(netwib_eths *peths,
					   netwib_consteth *pinfeth,
					   netwib_consteth *psupeth);

       /*-------------------------------------------------------------*/
       /* Name : netwib_eths_del_eths
	  Description :
	    Remove a list of addresses to the netwib_eths.
	  Input parameter(s) :
	    *pethstoadd : netwib_eths to remove
	  Input/output parameter(s) :
	    *peths : netwib_eths where to work
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_eths_del_eths(netwib_eths *peths,
				       netwib_consteths *pethstodel);

       /*-------------------------------------------------------------*/
       /* Name : netwib_eths_contains_xyz
	  Description :
	    Check if a netwib_eth is in the list.
	  Input parameter(s) :
	    eth : netwib_eth to find
	  Input/output parameter(s) :
	    *peths : netwib_eths containing the list of addresses
	  Output parameter(s) :
	    *pyes : true if netwib_eth is found
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_eths_contains_eth(netwib_consteths *peths,
					   netwib_consteth *peth,
					   netwib_bool *pyes);
       netwib_err netwib_eths_contains_ethrange(netwib_consteths *peths,
						netwib_consteth *pinfeth,
						netwib_consteth *psupeth,
						netwib_bool *pyes);

       /*-------------------------------------------------------------*/
       /* Name : netwib_buf_append_eths
	  Description :
	    Append a string representing a netwib_eths.
	  Input parameter(s) :
	    *peths : netwib_eths to append
	  Input/output parameter(s) :
	    pbuf : buffer updated
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_buf_append_eths(netwib_consteths *peths,
					 netwib_buf *pbuf);

MODULE ETHSI
       /*-------------------------------------------------------------*/
       typedef struct netwib_eths_index netwib_eths_index;

       /*-------------------------------------------------------------*/
       /* Name : netwib_eths_index_init
	  Description :
	    Initialize a netwib_eths_index used to loop through
	    a netwib_eths.
	  Input parameter(s) :
	  Input/output parameter(s) :
	  Output parameter(s) :
	    **ppethsindex : netwib_eths_index allocated and initialized
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_eths_index_init(netwib_consteths *peths,
					 netwib_eths_index **ppethsindex);

       /*-------------------------------------------------------------*/
       /* Name : netwib_eths_index_close
	  Description :
	    Close a netwib_ethsindex.
	  Input parameter(s) :
	  Input/output parameter(s) :
	    **ppethsindex : netwib_eths_index closed
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_eths_index_close(netwib_eths_index **ppethsindex);

       /*-------------------------------------------------------------*/
       /* Types to control a netwib_eths_index */
       typedef enum {
	 NETWIB_ETHS_INDEX_CTLTYPE_REWIND = 1,	/* position at beginning */
	 NETWIB_ETHS_INDEX_CTLTYPE_INDEX	/* reset with index pos */
       } netwib_eths_index_ctltype;
       /* Those functions permit to set/get parameters (pointer and
	  integer) about a netwib_eths_index. It should not be used directly,
	  but by the defines.
       */
       netwib_err netwib_eths_index_ctl_set(netwib_eths_index *pethsindex,
					    netwib_eths_index_ctltype type,
					    netwib_ptr p,
					    netwib_uint32 ui);
       netwib_err netwib_eths_index_ctl_get(netwib_eths_index *pethsindex,
					    netwib_eths_index_ctltype type,
					    netwib_ptr p,
					    netwib_uint32 *pui);

       /*-------------------------------------------------------------*/
       /* netwib_err f(netwib_eths_index *pethsindex); */
       #define netwib_eths_index_ctl_set_rewind(pethsindex) netwib_eths_index_ctl_set(pethsindex,NETWIB_ETHS_INDEX_CTLTYPE_REWIND,NULL,0)
       /* netwib_err f(netwib_eths_index *pethsindex,netwib_eths_index *pethsindexref);*/
       #define netwib_eths_index_ctl_set_index(pethsindex,pethsindexref) netwib_eths_index_ctl_set(pethsindex,NETWIB_ETHS_INDEX_CTLTYPE_INDEX,pethsindexref,0)

       /*-------------------------------------------------------------*/
       /* Name : netwib_eths_index_next_eth
	  Description :
	    Get the next netwib_eth in the list.
	  Input parameter(s) :
	  Input/output parameter(s) :
	    *pethsindex : netwib_eths_index
	  Output parameter(s) :
	    *peth : next netwib_eth
	  Normal return values :
	    NETWIB_ERR_OK : ok
	    NETWIB_ERR_DATAEND : end of the list reached
	  Note :
	    If one thread changes the netwib_eths between two calls,
	    the next result might be incorrect. Developer have to
	    lock the entire loop (going through each item), or to
	    copy the netwib_eths and to loop on the copy.
       */
       netwib_err netwib_eths_index_next_eth(netwib_eths_index *pethsindex,
					     netwib_eth *peth);
       netwib_err netwib_eths_index_next_ethrange(netwib_eths_index *pethsindex,
						  netwib_eth *pinfeth,
						  netwib_eth *psupeth);

       /*-------------------------------------------------------------*/
       /* Name : netwib_eths_index_this_eth
	  Description :
	    Re-give the last netwib_eth in the list.
	  Input parameter(s) :
	  Input/output parameter(s) :
	    *pethsindex : netwib_eths_index
	  Output parameter(s) :
	    *peth : next netwib_eth
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_eths_index_this_eth(netwib_eths_index *pethsindex,
					     netwib_eth *peth);
       netwib_err netwib_eths_index_this_ethrange(netwib_eths_index *pethsindex,
						  netwib_eth *pinfeth,
						  netwib_eth *psupeth);

       /*-------------------------------------------------------------*/
       /* Name : netwib_eths_index_this_del
	  Description :
	    Delete the last given value by a netwib_eths_index_next
	    function.
	  Input parameter(s) :
	  Input/output parameter(s) :
	    *pethsindex : netwib_eths_index
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_eths_index_this_del(netwib_eths_index *pethsindex);

MODULE PORTS
       /*-------------------------------------------------------------*/
       /***************************************************************
	* An port range is of the form :			      *
	*				    portinf	portsup	      *
	*   123			     :	      123	  123	      *
	*   123-124		     :	      123	  124	      *
	*							      *
	* An netwib_ports is of the form :			      *
	*   port,port,portrange,portrange			      *
	*   all,!port,!portrange				      *
	*							      *
	* Complete examples :					      *
	*   123							      *
	*   123-125						      *
	*   1234,5678						      *
	*   1234,12356-12358					      *
	*   all,!1234,!1244-1246				      *
	***************************************************************/

       /*-------------------------------------------------------------*/
       /***************************************************************
	* Those functions ignores following error cases :	      *
	*  - if we try to add a value already in the list	      *
	*  - if we try to remove a value not in the list	      *
	***************************************************************/

       /*-------------------------------------------------------------*/
       typedef struct netwib_ports netwib_ports;
       typedef const netwib_ports netwib_constports;

       /*-------------------------------------------------------------*/
       /* Name : netwib_ports_init
	  Description :
	    Initialize a netwib_ports used to store port list.
	  Input parameter(s) :
	    inittype : if future added items will be sorted and/or unique
	  Input/output parameter(s) :
	  Output parameter(s) :
	    **ppports : netwib_ports allocated and initialized
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       typedef enum {
	 NETWIB_PORTS_INITTYPE_SORTUNIQ = 1, /* sorted and unique */
	 NETWIB_PORTS_INITTYPE_NOTSORTUNIQ = 2, /* not sorted and unique */
	 NETWIB_PORTS_INITTYPE_NOTSORTNOTUNIQ = 3 /* not sorted and not
						     unique (duplicates
						     are not removed) */
       } netwib_ports_inittype;
       netwib_err netwib_ports_init(netwib_ports_inittype inittype,
				    netwib_ports **ppports);
       #define netwib_ports_initdefault(ppports) netwib_ports_init(NETWIB_PORTS_INITTYPE_SORTUNIQ,ppports)

       /*-------------------------------------------------------------*/
       /* Name : netwib_ports_close
	  Description :
	    Close a netwib_ports.
	  Input parameter(s) :
	  Input/output parameter(s) :
	    **ppports : netwib_ports closed
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_ports_close(netwib_ports **ppports);

       /*-------------------------------------------------------------*/
       /* Name : netwib_ports_add_port
	  Description :
	    Add a port to the netwib_ports.
	  Input parameter(s) :
	    port : address to add
	  Input/output parameter(s) :
	    *pports : netwib_ports where to work
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_ports_add_port(netwib_ports *pports,
					netwib_port port);

       /*-------------------------------------------------------------*/
       /* Name : netwib_ports_add_portrange
	  Description :
	    Add a range of ports to the netwib_ports.
	  Input parameter(s) :
	    infport : inferior port
	    support : superior port
	  Input/output parameter(s) :
	    *pports : netwib_ports where to work
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_ports_add_portrange(netwib_ports *pports,
					     netwib_port infport,
					     netwib_port support);

       /*-------------------------------------------------------------*/
       /* Name : netwib_ports_add_ports
	  Description :
	    Add a list of port to the netwib_ports.
	  Input parameter(s) :
	    *pportstoadd : netwib_ports to add
	  Input/output parameter(s) :
	    *pports : netwib_ports where to work
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_ports_add_ports(netwib_ports *pports,
					 netwib_constports *pportstoadd);

       /*-------------------------------------------------------------*/
       /* Name : netwib_ports_add_buf
	  Description :
	    Update a netwib_ports with a string like "1234-1235".
	  Input parameter(s) :
	    *pbuf : buffer containing string
	  Input/output parameter(s) :
	    *pports : netwib_ports updated
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
	  Note :
	    If an error occurs during insertion, result will only
	    contain partial data. It's developer's job to use a
	    temporary netwib_ports to deal with such errors.
       */
       netwib_err netwib_ports_add_buf(netwib_ports *pports,
				       netwib_constbuf *pbuf);

       /*-------------------------------------------------------------*/
       /* Name : netwib_ports_add_kbd
	  Description :
	    Update a netwib_ports with data entered through keyboard.
	  Input parameter(s) :
	    message : message to print before
	    defaultlist : default list to use if user enters nothing
			  if NULL, there is no default
	  Input/output parameter(s) :
	    *pports : netwib_ports updated
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_ports_add_kbd(netwib_ports *pports,
				       netwib_constbuf *pmessage,
				       netwib_constbuf *pdefaultlist);

       /*-------------------------------------------------------------*/
       /* Name : netwib_ports_del_port
	  Description :
	    Del a port from the netwib_ports.
	  Input parameter(s) :
	    port : address to delete
	  Input/output parameter(s) :
	    *pports : netwib_ports where to work
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_ports_del_port(netwib_ports *pports,
					netwib_port port);

       /*-------------------------------------------------------------*/
       /* Name : netwib_ports_del_portrange
	  Description :
	    Del a range of ports to the netwib_ports.
	  Input parameter(s) :
	    infport : inferior port
	    support : superior port
	  Input/output parameter(s) :
	    *pports : netwib_ports where to work
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_ports_del_portrange(netwib_ports *pports,
					     netwib_port infport,
					     netwib_port support);

       /*-------------------------------------------------------------*/
       /* Name : netwib_ports_del_ports
	  Description :
	    Remove a list of port to the netwib_ports.
	  Input parameter(s) :
	    *pportstodel : netwib_ports to remove
	  Input/output parameter(s) :
	    *pports : netwib_ports where to work
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_ports_del_ports(netwib_ports *pports,
					 netwib_constports *pportstodel);

       /*-------------------------------------------------------------*/
       /* Name : netwib_ports_contains_xyz
	  Description :
	    Check if a netwib_port is in the list.
	  Input parameter(s) :
	    port : netwib_port to find
	  Input/output parameter(s) :
	    *pports : netwib_ports containing the list of addresses
	  Output parameter(s) :
	    *pyes : true if netwib_port is found
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_ports_contains_port(netwib_constports *pports,
					     netwib_port port,
					     netwib_bool *pyes);
       netwib_err netwib_ports_contains_portrange(netwib_constports *pports,
						  netwib_port infport,
						  netwib_port support,
						  netwib_bool *pyes);

       /*-------------------------------------------------------------*/
       /* Name : netwib_buf_append_ports
	  Description :
	    Append a string representing a netwib_ports.
	  Input parameter(s) :
	    *pports : netwib_ports to append
	  Input/output parameter(s) :
	    pbuf : buffer updated
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_buf_append_ports(netwib_constports *pports,
					  netwib_buf *pbuf);

MODULE PORTSI
       /*-------------------------------------------------------------*/
       typedef struct netwib_ports_index netwib_ports_index;

       /*-------------------------------------------------------------*/
       /* Name : netwib_ports_index_init
	  Description :
	    Initialize a netwib_ports_index used to loop through
	    a netwib_ports.
	  Input parameter(s) :
	  Input/output parameter(s) :
	  Output parameter(s) :
	    **ppportsindex : netwib_ports_index allocated and initialized
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_ports_index_init(netwib_constports *pports,
					  netwib_ports_index **ppportsindex);

       /*-------------------------------------------------------------*/
       /* Name : netwib_ports_index_close
	  Description :
	    Close a netwib_portsindex.
	  Input parameter(s) :
	  Input/output parameter(s) :
	    **ppportsindex : netwib_ports_index closed
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_ports_index_close(netwib_ports_index **ppportsindex);

       /*-------------------------------------------------------------*/
       /* Types to control a netwib_ports_index */
       typedef enum {
	 NETWIB_PORTS_INDEX_CTLTYPE_REWIND = 1,	 /* position at beginning */
	 NETWIB_PORTS_INDEX_CTLTYPE_INDEX	 /* reset with index pos */
       } netwib_ports_index_ctltype;
       /* Those functions permit to set/get parameters (pointer and
	  integer) about a netwib_ports_index. It should not be used directly,
	  but by the defines.
       */
       netwib_err netwib_ports_index_ctl_set(netwib_ports_index *pportsindex,
					     netwib_ports_index_ctltype type,
					     netwib_ptr p,
					     netwib_uint32 ui);
       netwib_err netwib_ports_index_ctl_get(netwib_ports_index *pportsindex,
					     netwib_ports_index_ctltype type,
					     netwib_ptr p,
					     netwib_uint32 *pui);

       /*-------------------------------------------------------------*/
       /* netwib_err f(netwib_ports_index *pportsindex); */
       #define netwib_ports_index_ctl_set_rewind(pportsindex) netwib_ports_index_ctl_set(pportsindex,NETWIB_PORTS_INDEX_CTLTYPE_REWIND,NULL,0)
       /* netwib_err f(netwib_ports_index *pportsindex,netwib_ports_index *pportsindexref);*/
       #define netwib_ports_index_ctl_set_index(pportsindex,pportsindexref) netwib_ports_index_ctl_set(pportsindex,NETWIB_PORTS_INDEX_CTLTYPE_INDEX,pportsindexref,0)

       /*-------------------------------------------------------------*/
       /* Name : netwib_ports_index_next_port
	  Description :
	    Get the next netwib_port in the list.
	  Input parameter(s) :
	  Input/output parameter(s) :
	    *pportsindex : netwib_ports_index
	  Output parameter(s) :
	    *pport : next netwib_port
	  Normal return values :
	    NETWIB_ERR_OK : ok
	    NETWIB_ERR_DATAEND : end of the list reached
	  Note :
	    If one thread changes the netwib_ports between two calls,
	    the next result might be incorrect. Developer have to
	    lock the entire loop (going through each item), or to
	    copy the netwib_ports and to loop on the copy.
       */
       netwib_err netwib_ports_index_next_port(netwib_ports_index *pportsindex,
					       netwib_port *pport);
       netwib_err netwib_ports_index_next_portrange(netwib_ports_index *pportsindex,
						    netwib_port *pinfport,
						    netwib_port *psupport);

       /*-------------------------------------------------------------*/
       /* Name : netwib_ports_index_this_port
	  Description :
	    Re-give the last netwib_port in the list.
	  Input parameter(s) :
	  Input/output parameter(s) :
	    *pportsindex : netwib_ports_index
	  Output parameter(s) :
	    *pport : next netwib_port
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_ports_index_this_port(netwib_ports_index *pportsindex,
					       netwib_port *pport);
       netwib_err netwib_ports_index_this_portrange(netwib_ports_index *pportsindex,
						    netwib_port *pinfport,
						    netwib_port *psupport);

       /*-------------------------------------------------------------*/
       /* Name : netwib_ports_index_this_del
	  Description :
	    Delete the last given value by a netwib_ports_index_next
	    function.
	  Input parameter(s) :
	  Input/output parameter(s) :
	    *pportsindex : netwib_ports_index
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_ports_index_this_del(netwib_ports_index *pportsindex);

MODULE CONF
       /*-------------------------------------------------------------*/
       /* Name : netwib_conf_display
	  Description :
	    Print devices/arp/routes configuration.
	  Input parameter(s) :
	  Input/output parameter(s) :
	  Output parameter(s) :
	    *pbuf : netwib_buf receiving data
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_conf_display(void);
       netwib_err netwib_buf_append_conf(netwib_buf *pbuf);

       /*-------------------------------------------------------------*/
       /* For debugging purposes only */
       netwib_err netwib_conf_debug_display(void);
       netwib_err netwib_buf_append_conf_debug(netwib_buf *pbuf);

MODULE CONFDEV
       /*-------------------------------------------------------------*/
       typedef struct netwib_conf_devices_index netwib_conf_devices_index;

       /*-------------------------------------------------------------*/
       typedef struct {
	 netwib_uint32 devnum;
	 netwib_buf device;
	 netwib_buf deviceeasy;
	 netwib_uint32 mtu;
	 netwib_device_hwtype hwtype;
	 netwib_eth eth;
       } netwib_conf_devices;

       /*-------------------------------------------------------------*/
       /* Name : netwib_conf_devices_index_init
	  Description :
	    Initialize a netwib_conf_devices_index used to loop through
	    a netwib_conf_devices.
	  Input parameter(s) :
	    pitem : address of netwib_conf_devices which will be set
		    on each call of netwib_conf_devices_next
	  Input/output parameter(s) :
	  Output parameter(s) :
	    **ppindex : netwib_conf_devices_index allocated and initialized
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_conf_devices_index_init(netwib_conf_devices *pitem,
						 netwib_conf_devices_index **ppindex);

       /*-------------------------------------------------------------*/
       /* Name : netwib_conf_devices_index_close
	  Description :
	    Close a netwib_conf_devices_index.
	  Input parameter(s) :
	  Input/output parameter(s) :
	    **ppindex : netwib_conf_devices_index to close
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_conf_devices_index_close(netwib_conf_devices_index **ppindex);

       /*-------------------------------------------------------------*/
       /* Name : netwib_conf_devices_index_next
	  Description :
	    Get next entry.
	  Input parameter(s) :
	  Input/output parameter(s) :
	    *pindex : netwib_conf_devices_index to work on
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
	    NETWIB_ERR_DATAEND : end reached
       */
       netwib_err netwib_conf_devices_index_next(netwib_conf_devices_index *pindex);

       /*-------------------------------------------------------------*/
       /* Name : netwib_conf_devices_display
	  Description :
	    Print devices configuration.
	  Input parameter(s) :
	  Input/output parameter(s) :
	  Output parameter(s) :
	    *pbuf : netwib_buf receiving data
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_conf_devices_display(void);
       netwib_err netwib_buf_append_conf_devices(netwib_buf *pbuf);

MODULE CONFIP
       /*-------------------------------------------------------------*/
       typedef struct netwib_conf_ip_index netwib_conf_ip_index;

       /*-------------------------------------------------------------*/
       typedef struct {
	 netwib_uint32 devnum;
	 /* ip configuration */
	 netwib_ip ip;
	 netwib_ip mask; /* set for IPv4 */
	 netwib_uint32 prefix; /* set for IPv6 */
	 /* point to point configuration */
	 netwib_bool ispointtopoint;
	 netwib_ip pointtopointip;
       } netwib_conf_ip;

       /*-------------------------------------------------------------*/
       /* Name : netwib_conf_ip_index_init
	  Description :
	    Initialize a netwib_conf_ip_index used to loop through
	    a netwib_conf_ip.
	  Input parameter(s) :
	    pitem : address of netwib_conf_ip which will be set
		    on each call of netwib_conf_ip_next
	  Input/output parameter(s) :
	  Output parameter(s) :
	    **ppindex : netwib_conf_ip_index allocated and initialized
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_conf_ip_index_init(netwib_conf_ip *pitem,
					    netwib_conf_ip_index **ppindex);

       /*-------------------------------------------------------------*/
       /* Name : netwib_conf_ip_index_close
	  Description :
	    Close a netwib_conf_ip_index.
	  Input parameter(s) :
	  Input/output parameter(s) :
	    **ppindex : netwib_conf_ip_index to close
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_conf_ip_index_close(netwib_conf_ip_index **ppindex);

       /*-------------------------------------------------------------*/
       /* Name : netwib_conf_ip_index_next
	  Description :
	    Get next entry.
	  Input parameter(s) :
	  Input/output parameter(s) :
	    *pindex : netwib_conf_ip_index to work on
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
	    NETWIB_ERR_DATAEND : end reached
       */
       netwib_err netwib_conf_ip_index_next(netwib_conf_ip_index *pindex);

       /*-------------------------------------------------------------*/
       /* Name : netwib_conf_ip_display
	  Description :
	    Print ip configuration.
	  Input parameter(s) :
	  Input/output parameter(s) :
	  Output parameter(s) :
	    *pbuf : netwib_buf receiving data
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_conf_ip_display(void);
       netwib_err netwib_buf_append_conf_ip(netwib_buf *pbuf);

MODULE CONFARP
       /*-------------------------------------------------------------*/
       typedef struct netwib_conf_arpcache_index netwib_conf_arpcache_index;

       /*-------------------------------------------------------------*/
       /***************************************************************
	* This structure stores :				      *
	*  - ARP cache for IPv4					      *
	*  - neighbors for IPv6					      *
	***************************************************************/

       /*-------------------------------------------------------------*/
       typedef struct {
	 netwib_uint32 devnum;
	 netwib_eth eth;
	 netwib_ip ip;
       } netwib_conf_arpcache;

       /*-------------------------------------------------------------*/
       /* Name : netwib_conf_arpcache_index_init
	  Description :
	    Initialize a netwib_conf_arpcache_index used to loop through
	    a netwib_conf_arpcache.
	  Input parameter(s) :
	    pitem : address of netwib_conf_arpcache which will be set
		    on each call of netwib_conf_arpcache_next
	  Input/output parameter(s) :
	  Output parameter(s) :
	    **ppindex : netwib_conf_arpcache_index allocated and initialized
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_conf_arpcache_index_init(netwib_conf_arpcache *pitem,
						  netwib_conf_arpcache_index **ppindex);

       /*-------------------------------------------------------------*/
       /* Name : netwib_conf_arpcache_index_close
	  Description :
	    Close a netwib_conf_arpcache_index.
	  Input parameter(s) :
	  Input/output parameter(s) :
	    **ppindex : netwib_conf_arpcache_index to close
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_conf_arpcache_index_close(netwib_conf_arpcache_index **ppindex);

       /*-------------------------------------------------------------*/
       /* Name : netwib_conf_arpcache_index_next
	  Description :
	    Get next entry.
	  Input parameter(s) :
	  Input/output parameter(s) :
	    *pindex : netwib_conf_arpcache_index to work on
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
	    NETWIB_ERR_DATAEND : end reached
       */
       netwib_err netwib_conf_arpcache_index_next(netwib_conf_arpcache_index *pindex);

       /*-------------------------------------------------------------*/
       /* Name : netwib_conf_arpcache_display
	  Description :
	    Print arp configuration.
	  Input parameter(s) :
	  Input/output parameter(s) :
	  Output parameter(s) :
	    *pbuf : netwib_buf receiving data
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_conf_arpcache_display(void);
       netwib_err netwib_buf_append_conf_arpcache(netwib_buf *pbuf);

       /*-------------------------------------------------------------*/
       /* Name : netwib_conf_arpcache_add
	  Description :
	    Add an entry in the cache. Then resolving functions
	    can find the value.
	  Input parameter(s) :
	    *pdevice : can be NULL if unknown
	    *peth : Ethernet address
	    *pip : IP address
	  Input/output parameter(s) :
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_conf_arpcache_add(netwib_constbuf *pdevice,
					   netwib_consteth *peth,
					   netwib_constip *pip);

MODULE CONFROUT
       /*-------------------------------------------------------------*/
       typedef struct netwib_conf_routes_index netwib_conf_routes_index;

       /*-------------------------------------------------------------*/
       typedef struct {
	 netwib_uint32 devnum;
	 netwib_ip dst;
	 netwib_ip mask; /* set for IPv4 */
	 netwib_uint32 prefix; /* set for IPv6 */
	 netwib_bool srcset;
	 netwib_ip src;
	 netwib_bool gwset;
	 netwib_ip gw;
	 netwib_uint32 metric;
       } netwib_conf_routes;
       /*
	 srcunset and gwunset : dst is a local device
	 srcset and gwunset   : dst in on LAN
	 srcunset and gwset   : error
	 srcset and gwset     : dst is through gw
       */

       /*-------------------------------------------------------------*/
       /* Name : netwib_conf_routes_index_init
	  Description :
	    Initialize a netwib_conf_routes_index used to loop through
	    a netwib_conf_routes.
	  Input parameter(s) :
	    pitem : address of netwib_conf_routes which will be set
		    on each call of netwib_conf_routes_next
	  Input/output parameter(s) :
	  Output parameter(s) :
	    **ppindex : netwib_conf_routes_index allocated and initialized
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_conf_routes_index_init(netwib_conf_routes *pitem,
						netwib_conf_routes_index **ppindex);

       /*-------------------------------------------------------------*/
       /* Name : netwib_conf_routes_index_close
	  Description :
	    Close a netwib_conf_routes_index.
	  Input parameter(s) :
	  Input/output parameter(s) :
	    **ppindex : netwib_conf_routes_index to close
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_conf_routes_index_close(netwib_conf_routes_index **ppindex);

       /*-------------------------------------------------------------*/
       /* Name : netwib_conf_routes_index_next
	  Description :
	    Get next entry.
	  Input parameter(s) :
	  Input/output parameter(s) :
	    *pindex : netwib_conf_routes_index to work on
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
	    NETWIB_ERR_DATAEND : end reached
       */
       netwib_err netwib_conf_routes_index_next(netwib_conf_routes_index *pindex);

       /*-------------------------------------------------------------*/
       /* Name : netwib_conf_routes_display
	  Description :
	    Print routes configuration.
	  Input parameter(s) :
	  Input/output parameter(s) :
	  Output parameter(s) :
	    *pbuf : netwib_buf receiving data
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_conf_routes_display(void);
       netwib_err netwib_buf_append_conf_routes(netwib_buf *pbuf);

       /*-------------------------------------------------------------*/
       /* Name : netwib_conf_routes_reach_eth
	  Description :
	    Determine device, sources addresses and destination Ethernet
	    address to use to send an IP packet to a host.
	  Input parameter(s) :
	    dstip : host to reach
	  Input/output parameter(s) :
	  Output parameter(s) :
	    *pdevice : device to use
	    *psrceth : Ethernet source address to use
	    *pdsteth : Ethernet destination address to use
	    *psrcip : IP source address to use
	  Normal return values :
	    NETWIB_ERR_OK : ok (set: all)
	    NETWIB_ERR_ROUTELOCALDEV : hostip is the address of a
					local device (set : device)
	    NETWIB_ERR_ROUTENOTETHER : Ethernet is not used to reach
					destination (set : none)
	    NETWIB_ERR_ROUTENOTFOUND : the routing table doesn't contain
					a route to hostip (set : none)
       */
       netwib_err netwib_conf_routes_reach_eth(netwib_constip *pdstip,
					       netwib_buf *pdevice,
					       netwib_eth *psrceth,
					       netwib_eth *pdsteth,
					       netwib_ip *psrcip);

       /*-------------------------------------------------------------*/
       /* Name : netwib_conf_routes_reach_ip
	  Description :
	    Determine device and addresses to use to send an IP packet
	    to a host.
	  Input parameter(s) :
	    dstip : host to reach
	  Input/output parameter(s) :
	  Output parameter(s) :
	    *pdevice : device to use (for example to sniff)
	    *psrcip : IP source address to use
	  Normal return values :
	    NETWIB_ERR_OK : ok (set: all)
	    NETWIB_ERR_ROUTELOCALDEV : hostip is the address of a
					local device (set : *pdevice)
	    NETWIB_ERR_ROUTENOTFOUND : the routing table doesn't contain
					a route to hostip (set : none)
       */
       netwib_err netwib_conf_routes_reach_ip(netwib_constip *pdstip,
					      netwib_buf *pdevice,
					      netwib_ip *psrcip);

MODULE SOCK
       /*-------------------------------------------------------------*/
       /* We need a forward declaration for netwib_ipproto.
       */
       #include "../pkt/types.h"

       /*-------------------------------------------------------------*/
       /***************************************************************
	* Parameter pip6exts permits to specify IP6 extensions (rfc   *
	* 3542). However, this is not yet implemented.		      *
	***************************************************************/

       /*-------------------------------------------------------------*/
       /* Name : netwib_io_init_sock_xyz
	  Description :
	    Initialize a socket connection.
	  Input parameter(s) :
	    localip : local IP
	    remoteip : remote IP
	    iptype : iptype to use
	    localport : local port
	    remoteport : remote port
	    *pip4opts : optional IP options to add
	  Input/output parameter(s) :
	  Output parameter(s) :
	    **ppio : netwib_io initialized
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_io_init_sock_udp_cli_full(netwib_constip *plocalip,
						   netwib_constip *premoteip,
						   netwib_port localport,
						   netwib_port remoteport,
						   netwib_constbuf *pip4opts,
						   netwib_ipproto ip6extsproto,
						   netwib_constbuf *pip6exts,
						   netwib_io **ppio);
       #define netwib_io_init_sock_udp_cli(plocalip,premoteip,localport,remoteport,ppio) netwib_io_init_sock_udp_cli_full(plocalip,premoteip,localport,remoteport,NULL,NETWIB_IPPROTO_NONE,NULL,ppio)
       #define netwib_io_init_sock_udp_cli_easy(premoteip,remoteport,ppio) netwib_io_init_sock_udp_cli(NULL,premoteip,0,remoteport,ppio)

       netwib_err netwib_io_init_sock_tcp_cli_full(netwib_constip *plocalip,
						   netwib_constip *premoteip,
						   netwib_port localport,
						   netwib_port remoteport,
						   netwib_constbuf *pip4opts,
						   netwib_ipproto ip6extsproto,
						   netwib_constbuf *pip6exts,
						   netwib_io **ppio);
       #define netwib_io_init_sock_tcp_cli(plocalip,premoteip,localport,remoteport,ppio) netwib_io_init_sock_tcp_cli_full(plocalip,premoteip,localport,remoteport,NULL,NETWIB_IPPROTO_NONE,NULL,ppio)
       #define netwib_io_init_sock_tcp_cli_easy(premoteip,remoteport,ppio) netwib_io_init_sock_tcp_cli(NULL,premoteip,0,remoteport,ppio)

       netwib_err netwib_io_init_sock_udp_ser_full(netwib_constip *plocalip,
						   netwib_port localport,
						   netwib_constbuf *pip4opts,
						   netwib_ipproto ip6extsproto,
						   netwib_constbuf *pip6exts,
						   netwib_io **ppio);
       #define netwib_io_init_sock_udp_ser(plocalip,localport,ppio) netwib_io_init_sock_udp_ser_full(plocalip,localport,NULL,NETWIB_IPPROTO_NONE,NULL,ppio)
       netwib_err netwib_io_init_sock_udp_ser_easy(netwib_iptype iptype,
						   netwib_port localport,
						   netwib_io **ppio);

       netwib_err netwib_io_init_sock_tcp_ser_full(netwib_constip *plocalip,
						   netwib_port localport,
						   netwib_constbuf *pip4opts,
						   netwib_ipproto ip6extsproto,
						   netwib_constbuf *pip6exts,
						   netwib_io **ppio);
       #define netwib_io_init_sock_tcp_ser(plocalip,localport,ppio) netwib_io_init_sock_tcp_ser_full(plocalip,localport,NULL,NETWIB_IPPROTO_NONE,NULL,ppio)
       netwib_err netwib_io_init_sock_tcp_ser_easy(netwib_iptype iptype,
						   netwib_port localport,
						   netwib_io **ppio);

       netwib_err netwib_io_init_sock_udp_mulser_full(netwib_constip *plocalip,
						      netwib_port localport,
						      netwib_constbuf *pip4opts,
						      netwib_ipproto ip6extsproto,
						      netwib_constbuf *pip6exts,
						      netwib_io **ppio);
       #define netwib_io_init_sock_udp_mulser(plocalip,localport,ppio) netwib_io_init_sock_udp_mulser_full(plocalip,localport,NULL,NETWIB_IPPROTO_NONE,NULL,ppio)
       netwib_err netwib_io_init_sock_udp_mulser_easy(netwib_iptype iptype,
						      netwib_port localport,
						      netwib_io **ppio);

       /*-------------------------------------------------------------*/
       /* Name : netwib_sock_tcp_mulser_full
	  Description :
	    Deal with a tcp multi-client server.
	    Note : we never exit from this function.
	  Input parameter(s) :
	    localip : listening IP address
	    localport : listening port
	    ip4opts : IP options to add
	    pfunc : memory address of the function which will be
		    called for each client. For each call, the first
		    parameter ('pio') will be set with socket,
		    and the second parameter ('pinfos')
		    will be set with the optional parameter below.
		    Note : at the end, this function must not close pio
	  Input/output parameter(s) :
	    pinfos : optional parameter (can be NULL) which will be
		     used as the second parameter for *pfunc. This
		     may be used to send information to *pfunc.
	  Output parameter(s) :
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       typedef netwib_err (*netwib_sock_tcp_mulser_pf)(netwib_io *pio,
						       netwib_ptr pinfos);
       netwib_err netwib_sock_tcp_mulser_full(netwib_constip *plocalip,
					      netwib_port localport,
					      netwib_constbuf *pip4opts,
					      netwib_ipproto ip6extsproto,
					      netwib_constbuf *pip6exts,
					      netwib_sock_tcp_mulser_pf pfunc,
					      netwib_ptr pinfos);
       #define netwib_sock_tcp_mulser(plocalip,localport,pfunc,pinfos) netwib_sock_tcp_mulser_full(plocalip,localport,NULL,NETWIB_IPPROTO_NONE,NULL,pfunc,pinfos)
       netwib_err netwib_sock_tcp_mulser_easy(netwib_iptype iptype,
					      netwib_port localport,
					      netwib_sock_tcp_mulser_pf pfunc,
					      netwib_ptr pinfos);

       /*-------------------------------------------------------------*/
       /* Set/get IP4 options */
       /* netwib_err f(netwib_io *pio, netwib_constbuf *pip4opts); */
       #define netwib_sock_ctl_set_ip4opts(pio,pip4opts) netwib_io_ctl_set(pio,NETWIB_IO_WAYTYPE_SUPPORTED,NETWIB_IO_CTLTYPE_SOCK_IP4OPTS,pip4opts,0)
       /* netwib_err f(netwib_io *pio, netwib_buf *pip4opts); */
       #define netwib_sock_ctl_get_ip4opts(pio,pip4opts) netwib_io_ctl_get(pio,NETWIB_IO_WAYTYPE_SUPPORTED,NETWIB_IO_CTLTYPE_SOCK_IP4OPTS,pip4opts,NULL)

       /*-------------------------------------------------------------*/
       /* Set/get IP6 extensions */
       /* netwib_err f(netwib_io *pio, netwib_ipproto ip6extsproto,
		       netwib_constbuf *pip6exts); */
       #define netwib_sock_ctl_set_ip6exts(pio,ip6extsproto,pip6exts) netwib_io_ctl_set(pio,NETWIB_IO_WAYTYPE_SUPPORTED,NETWIB_IO_CTLTYPE_SOCK_IP6EXTS,pip6exts,ip6extsproto)
       /* netwib_err f(netwib_io *pio, netwib_ipproto *pip6extsproto,
		       netwib_buf *pip6exts); */
       #define netwib_sock_ctl_get_ip6exts(pio,pip6extsproto,pip6exts) netwib_io_ctl_get(pio,NETWIB_IO_WAYTYPE_SUPPORTED,NETWIB_IO_CTLTYPE_SOCK_IP6EXTS,pip6exts,pip6extsproto)

       /*-------------------------------------------------------------*/
       /* Obtain local IP address and port */
       /* netwib_err f(netwib_io *pio, netwib_ip *pip, netwib_port *pport); */
       #define netwib_sock_ctl_get_local(pio,pip,pport) netwib_io_ctl_get(pio,NETWIB_IO_WAYTYPE_SUPPORTED,NETWIB_IO_CTLTYPE_SOCK_LOCAL,pip,pport)
       /* Obtain remote IP address and port */
       /* netwib_err f(netwib_io *pio, netwib_ip *pip, netwib_port *pport); */
       #define netwib_sock_ctl_get_remote(pio,pip,pport) netwib_io_ctl_get(pio,NETWIB_IO_WAYTYPE_SUPPORTED,NETWIB_IO_CTLTYPE_SOCK_REMOTE,pip,pport)

       /*-------------------------------------------------------------*/
       /* Change multicast TTL */
       /* netwib_err f(netwib_io *pio, netwib_uin32 ttl); */
       #define netwib_sock_ctl_set_multicastttl(pio,ttl) netwib_io_ctl_set(pio,NETWIB_IO_WAYTYPE_SUPPORTED,NETWIB_IO_CTLTYPE_SOCK_MULTICASTTTL,NULL,ttl)

       /*-------------------------------------------------------------*/
       typedef enum {
	 NETWIB_IO_SOCKTYPE_UDP_CLI = 1,
	 NETWIB_IO_SOCKTYPE_TCP_CLI,
	 NETWIB_IO_SOCKTYPE_UDP_SER,
	 NETWIB_IO_SOCKTYPE_TCP_SER,
	 NETWIB_IO_SOCKTYPE_UDP_MULSER,
	 NETWIB_IO_SOCKTYPE_TCP_MULSER
       } netwib_io_socktype;
       /* Get socket type */
       /* netwib_err f(netwib_io *pio, netwib_io_socktype *psocktype); */
       #define netwib_sock_ctl_get_socktype(pio,psocktype) netwib_io_ctl_get(pio,NETWIB_IO_WAYTYPE_SUPPORTED,NETWIB_IO_CTLTYPE_SOCK_SOCKTYPE,psocktype,NULL)

MODULE SNIFF
       /*-------------------------------------------------------------*/
       /***************************************************************
	* Netwib supports Ethernet cards(netwib_device_hwtype=ETHER), *
	* Loopback(LOOPBACK) and Serial Modems(PPP).		      *
	* Unfortunately, these are not supported on every system as   *
	* described in this table.				      *
	*							      *
	*	     Device_hwtype	 Supported?  Returned_DLT     *
	*  FreeBSD :						      *
	*	     ETHER		 yes	     ETHER	      *
	*	     LOOPBACK		 yes	     NULL	      *
	*	     PPP		 yes	     ?[7]	      *
	*  Linux :						      *
	*	     ETHER		 yes	     ETHER	      *
	*	     LOOPBACK		 yes	     NULL	      *
	*	     PPP		 yes	     ?[7]	      *
	*  OpenBSD :						      *
	*	     ETHER		 yes	     ETHER	      *
	*	     LOOPBACK		 yes	     LOOP	      *
	*	     PPP		 yes	     ?[7]	      *
	*  Solaris :						      *
	*	     ETHER		 yes	     ETHER	      *
	*	     LOOPBACK		 no	     -		      *
	*	     PPP		 yes[1]	     ?[7]	      *
	*  Windows 95 :						      *
	*	     ETHER		 yes	     ETHER	      *
	*	     LOOPBACK		 no	     -		      *
	*	     PPP		 yes[1][2]   ETHER	      *
	*  Windows 98 :						      *
	*	     ETHER		 yes	     ETHER	      *
	*	     LOOPBACK		 no	     -		      *
	*	     PPP		 yes[1]	     ETHER	      *
	*  Windows Me :						      *
	*	     ETHER		 yes	     ETHER	      *
	*	     LOOPBACK		 no	     -		      *
	*	     PPP		 ?[3]	     ETHER	      *
	*  Windows NT4 :					      *
	*	     ETHER		 yes	     ETHER	      *
	*	     LOOPBACK		 no	     -		      *
	*	     PPP		 y/n[1][4]   ETHER	      *
	*  Windows 2000 :					      *
	*	     ETHER		 yes	     ETHER	      *
	*	     LOOPBACK		 no	     -		      *
	*	     PPP		 no[5]	     ETHER	      *
	*  Windows XP :						      *
	*	     ETHER		 yes	     ETHER	      *
	*	     LOOPBACK		 no	     -		      *
	*	     PPP		 no[6]	     -		      *
	*							      *
	* Notes :						      *
	*  1 : System adds a fake Ethernet header		      *
	*  2 : Windows Sockets 2 and Dialup Networking 1.3 have to    *
	*      be installed (urls are in problemusagewindows_en.txt)  *
	*  3 : Not tested					      *
	*  4 : As described in WinPCAP FAQ, it doesn't work (but, it  *
	*      works on my computer)				      *
	*  5 : As described in WinPCAP FAQ, it doesn't work (on my    *
	*      computer, when packets are sniffed, we can't spoof)    *
	*  6 : As described in WinPCAP FAQ, it doesn't work (a	      *
	*      contributor confirmed that it doesn't work on its      *
	*      computer)					      *
	*  7 : I'll summarize this info later...		      *
	***************************************************************/

       /*-------------------------------------------------------------*/
       /* Name : netwib_io_init_sniff
	  Description :
	    Open a sniff session.
	    Returned packets will start at Link header.
	  Input parameter(s) :
	    *pdevice : device where we sniff
	    *pfilter : sniff filter (NULL to sniff everything)
	  Input/output parameter(s) :
	  Output parameter(s) :
	    **ppio : io created
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_io_init_sniff(netwib_constbuf *pdevice,
				       netwib_constbuf *pfilter,
				       netwib_io **ppio);

       /*-------------------------------------------------------------*/
       /***************************************************************
	* Note about sniff filters :				      *
	* Filters permit to select network packets we sniff.	      *
	* Basic elements of a bpf filter are :			      *
	*    host 1.2.3.4					      *
	*    net 192.168.10					      *
	*    net 192.168.10.0 mask 255.255.255.0		      *
	*    net 192.168.10.0/24				      *
	*    port 21						      *
	*    dst host 1.2.3.4					      *
	*    src port 2345					      *
	*    ether host a:b:c:d:e:f ("ether a:b:c:d:e:f" is not working)
	*    ether src aa:bb:cc:dd:ee:ff			      *
	*    ip							      *
	*    arp						      *
	*    rarp						      *
	*    tcp						      *
	*    icmp						      *
	*    udp						      *
	* Here are filter examples :				      *
	*    host 1.2.3.4					      *
	*    net 192.168 and icmp				      *
	*    host 1.2.3.4 or dst port 80			      *
	*    (udp or tcp) and not host 1.2.3.4			      *
	***************************************************************/

       /* change the filter */
       /* netwib_err f(netwib_io *pio, netwib_constbuf *pfilter); */
       #define netwib_sniff_ctl_set_filter(pio,pfilter) netwib_io_ctl_set(pio,NETWIB_IO_WAYTYPE_SUPPORTED,NETWIB_IO_CTLTYPE_SNIFF_FILTER,pfilter,0)
       /* netwib_err f(netwib_io *pio, netwib_buf *pfilter); */
       #define netwib_sniff_ctl_get_filter(pio,pfilter) netwib_io_ctl_get(pio,NETWIB_IO_WAYTYPE_SUPPORTED,NETWIB_IO_CTLTYPE_SNIFF_FILTER,pfilter,NULL)

       /*-------------------------------------------------------------*/
       /* obtain the DLT of returned packets */
       /* netwib_err f(netwib_io *pio, netwib_device_dlttype *pdlt); */
       #define netwib_sniff_ctl_get_dlt(pio,pdlt) netwib_io_ctl_get(pio,NETWIB_IO_WAYTYPE_SUPPORTED,NETWIB_IO_CTLTYPE_SNIFF_DLT,NULL,(netwib_uint32*)pdlt)

       /*-------------------------------------------------------------*/
       /***************************************************************
	* This io link :					      *
	*  - has to be plugged on netwib_io_init_sniff		      *
	*  - reassemble fragmented IP packets			      *
	*  - do nothing with other packets			      *
	***************************************************************/
       netwib_err netwib_io_init_sniff_ipreas(netwib_io **ppio);

       /*-------------------------------------------------------------*/
       /***************************************************************
	* This io link :					      *
	*  - has to be plugged on netwib_io_init_sniff_ipreas	      *
	*  - reorder sequences of TCP packets			      *
	*  - remove duplicate TCP packets			      *
	*  - do nothing with other packets			      *
	***************************************************************/
       netwib_err netwib_io_init_sniff_tcpreord(netwib_io **ppio);

       /*-------------------------------------------------------------*/
       /* Name : netwib_io_init_sniff_ip
	  Description :
	    Open a sniff session, and return only IP packets.
	    Returned packets will start at IP header (DLTTYPE_RAW).
	  Input parameter(s) :
	    *pdevice : device where we sniff
	    *pfilter : sniff filter (NULL to sniff everything)
	    ipreas : if netwib_io_init_sniff_ipreas has to
		     be used
	    tcpreord : if netwib_io_init_sniff_tcpreord has to
		       be used
	  Input/output parameter(s) :
	  Output parameter(s) :
	    **ppio : io created
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_io_init_sniff_ip(netwib_constbuf *pdevice,
					  netwib_constbuf *pfilter,
					  netwib_bool ipreas,
					  netwib_bool tcpreord,
					  netwib_io **ppio);

MODULE SPOOF
       /*-------------------------------------------------------------*/
       /***************************************************************
	* Netwib supports Ethernet cards(netwib_device_hwtype=ETHER), *
	* Loopback(LOOPBACK) and Serial Modems(PPP).		      *
	* Unfortunately, these are not supported on every system as   *
	* described in this table.				      *
	*							      *
	*	Device	  LINK	     LINK_dlt	IP4	   IP6	      *
	*	hwtype	  supported? to_use	supported? supported? *
	*  FreeBSD :						      *
	*	ETHER	  yes	     ETHER	yes	   ?[3]	      *
	*	LOOPBACK  yes	     NULL	yes	   ?[3]	      *
	*	PPP	  ?[3]	     ?[3]	yes	   ?[3]	      *
	*  Linux :						      *
	*	ETHER	  yes	     ETHER	yes	   yes[4]     *
	*	LOOPBACK  no	     -		yes	   yes[4]     *
	*	PPP	  ?[3]	     ?[3]	yes	   yes[4]     *
	*  OpenBSD :						      *
	*	ETHER	  yes	     ETHER	yes	   ?[3]	      *
	*	LOOPBACK  no	     -		yes	   ?[3]	      *
	*	PPP	  ?[3]	     ?[3]	yes	   ?[3]	      *
	*  Solaris :						      *
	*	ETHER	  yes	     ETHER	yes	   ?[3]	      *
	*	LOOPBACK  no	     -		no[1]	   no[1]      *
	*	PPP	  ?[3]	     ?[3]	yes	   ?[3]	      *
	*  Windows 95 :						      *
	*	ETHER	  yes	     ETHER	no	   no	      *
	*	LOOPBACK  no	     -		no	   no	      *
	*	PPP	  no	     no		no	   no	      *
	*  Windows 98 :						      *
	*	ETHER	  yes	     ETHER	no	   no	      *
	*	LOOPBACK  no	     -		no	   no	      *
	*	PPP	  no	     no		no	   no	      *
	*  Windows Me :						      *
	*	ETHER	  yes	     ETHER	no	   no	      *
	*	LOOPBACK  no	     -		no	   no	      *
	*	PPP	  ?[3]	     ?[3]	no	   no	      *
	*  Windows NT4 :					      *
	*	ETHER	  yes	     ETHER	no	   no	      *
	*	LOOPBACK  no	     -		no	   no	      *
	*	PPP	  no	     no		no	   no	      *
	*  Windows 2000 :					      *
	*	ETHER	  yes	     ETHER	yes	   ?[3]	      *
	*	LOOPBACK  no	     -		no	   no	      *
	*	PPP	  ?[3]	     ?[3]	yes	   ?[3]	      *
	*  Windows XP :						      *
	*	ETHER	  yes	     ETHER	yes	   yes[4]     *
	*	LOOPBACK  no	     -		no	   no	      *
	*	PPP	  ?[3]	     ?[3]	?[2]	   ?[3]	      *
	*							      *
	* Notes :						      *
	*  1 : not sure						      *
	*  2 : not tested					      *
	*  3 : I'll summarize this info later...		      *
	*  4 : on systems where IPv6 is supported		      *
	***************************************************************/

       /*-------------------------------------------------------------*/
       /* Name : netwib_io_init_spoof
	  Description :
	    Open a spoof session.
	  Input parameter(s) :
	    *pdevice : device where we spoof
	  Input/output parameter(s) :
	  Output parameter(s) :
	    **ppio : io created
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       typedef enum {
	 NETWIB_SPOOF_INITTYPE_LINK = 1,    /* spoof at link level */
	 NETWIB_SPOOF_INITTYPE_IP4,	    /* spoof at IP4 level */
	 NETWIB_SPOOF_INITTYPE_IP6	    /* spoof at IP6 level */
       } netwib_spoof_inittype;
       netwib_err netwib_io_init_spoof(netwib_spoof_inittype inittype,
				       netwib_constbuf *pdevice,
				       netwib_io **ppio);
       #define netwib_io_init_spoof_link(device,ppio) netwib_io_init_spoof(NETWIB_SPOOF_INITTYPE_LINK,device,ppio)
       #define netwib_io_init_spoof_ip4(ppio) netwib_io_init_spoof(NETWIB_SPOOF_INITTYPE_IP4,NULL,ppio)
       #define netwib_io_init_spoof_ip6(ppio) netwib_io_init_spoof(NETWIB_SPOOF_INITTYPE_IP6,NULL,ppio)

       /*-------------------------------------------------------------*/
       /* obtain the DLT needed to spoof at link level */
       /* netwib_err f(netwib_io *pio, netwib_device_dlttype *pdlt); */
       #define netwib_spoof_ctl_get_dlt(pio,pdlt) netwib_io_ctl_get(pio,NETWIB_IO_WAYTYPE_SUPPORTED,NETWIB_IO_CTLTYPE_SPOOF_DLT,NULL,(netwib_uint32*)pdlt)

       /*-------------------------------------------------------------*/
       /***************************************************************
	* This io permits to spoof at IP4/6 level (DLTTYPE_RAW).      *
	***************************************************************/
       typedef enum {
	 NETWIB_SPOOF_IP_INITTYPE_UNKNOWN = 0,
	 NETWIB_SPOOF_IP_INITTYPE_RAW,	 /* use only IP4/6 level */
	 NETWIB_SPOOF_IP_INITTYPE_LINKF, /* add a link header and spoof
					    at link level (source ad
					    is filled) */
	 NETWIB_SPOOF_IP_INITTYPE_LINKB, /* add a link header and spoof
					    at link level (source ad
					    is blank (0:0:0:0:0:0)) */
	 NETWIB_SPOOF_IP_INITTYPE_LINKFB, /* add a link header and spoof
					     at link level (source ad
					     can be blank) */
	 NETWIB_SPOOF_IP_INITTYPE_RAWLINKF, /* try IP4/6 level. If doesn't
					       work, use link */
	 NETWIB_SPOOF_IP_INITTYPE_RAWLINKB,
	 NETWIB_SPOOF_IP_INITTYPE_RAWLINKFB,
	 NETWIB_SPOOF_IP_INITTYPE_LINKFRAW, /* try link level. If doesn't
					       work, use IP4/6 */
	 NETWIB_SPOOF_IP_INITTYPE_LINKBRAW,
	 NETWIB_SPOOF_IP_INITTYPE_LINKFBRAW,
	 NETWIB_SPOOF_IP_INITTYPE_LINK = NETWIB_SPOOF_IP_INITTYPE_LINKFB,
	 NETWIB_SPOOF_IP_INITTYPE_RAWLINK = NETWIB_SPOOF_IP_INITTYPE_RAWLINKFB,
	 NETWIB_SPOOF_IP_INITTYPE_LINKRAW = NETWIB_SPOOF_IP_INITTYPE_LINKFBRAW,
	 NETWIB_SPOOF_IP_INITTYPE_BEST = NETWIB_SPOOF_IP_INITTYPE_LINKRAW
       } netwib_spoof_ip_inittype;
       netwib_err netwib_io_init_spoof_ip(netwib_spoof_ip_inittype inittype,
					  netwib_io **ppio);
       #define netwib_io_init_spoof_ip_best(ppio) netwib_io_init_spoof_ip(NETWIB_SPOOF_IP_INITTYPE_BEST,NETWIB_PKT_FIELDTYPE_BEST,ppio)

       /*-------------------------------------------------------------*/
       /* Name : netwib_buf_append_spoof_ip_inittype
	  Description :
	    Obtains the buf string corresponding to a type.
	  Input parameter(s) :
	    type : type
	  Input/output parameter(s) :
	  Output parameter(s) :
	    *pbuf : netwib_buf set with the buf string
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_buf_append_spoof_ip_inittype(netwib_spoof_ip_inittype type,
						      netwib_buf *pbuf);

       /*-------------------------------------------------------------*/
       /* Name : netwib_spoof_ip_inittype_init_kbd
	  Description :
	    Initialize a netwib_spoof_ip_inittype with data entered
	    through keyboard.
	  Input parameter(s) :
	    *pmessage : message to print before
	    defaulttype : default type to use if user enters
			  nothing (if NETWIB_SPOOF_IP_INITTYPE_UNKNOWN,
			  means no default)
	  Input/output parameter(s) :
	  Output parameter(s) :
	    *phwtype : netwib_hwtype initialized
	  Normal return values :
	    NETWIB_ERR_OK : ok
       */
       netwib_err netwib_spoof_ip_inittype_init_kbd(netwib_constbuf *pmessage,
						    netwib_spoof_ip_inittype defaulttype,
						    netwib_spoof_ip_inittype *ptype);
       #define NETWIB_SPOOF_IP_INITTYPE_INIT_KBD_NODEF NETWIB_SPOOF_IP_INITTYPE_UNKNOWN

SEE ALSO
       netwib(3), netwib_dat(3), netwib_sys(3), netwib_net(3),	netwib_pkt(3),
       netwib_shw(3), netwib_err(3)

				  14/02/2010			 NETWIB_NET(3)
[top]

List of man pages available for DragonFly

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net