/*-------------------------------------------------------------*/
/***************************************************************
* 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);