/*-------------------------------------------------------------*/
/***************************************************************
* Refer to RFC 791 to obtain more information about IPv4 *
* options. *
***************************************************************/
/*-------------------------------------------------------------*/
/* Comments starting with "NI" are not implemented */
typedef enum {
NETWIB_IP4OPTTYPE_END = 0, /* end of options */
NETWIB_IP4OPTTYPE_NOOP = 1, /* no operation */
NETWIB_IP4OPTTYPE_RR = 7, /* record route */
NETWIB_IP4OPTTYPE_TIME = 68, /* timestamp */
NETWIB_IP4OPTTYPE_SECURITY = 130, /* NI security compartmentation */
NETWIB_IP4OPTTYPE_LSRR = 131, /* loose source and record route */
NETWIB_IP4OPTTYPE_STREAM = 136, /* NI SATNET stream identifier */
NETWIB_IP4OPTTYPE_SSRR = 137 /* strict source and record route */
} netwib_ip4opttype;
/*-------------------------------------------------------------*/
/* maximum length of one IP4 option */
#define NETWIB_IP4OPT_MAXLEN 40
/*-------------------------------------------------------------*/
typedef struct {
netwib_uint32 storagesize; /* 0 to 9 */
netwib_uint32 storedvalues; /* 0 to storagesize */
#define NETWIB_IP4OPT_RR_IP_LEN 9
netwib_ip ip[NETWIB_IP4OPT_RR_IP_LEN];
} netwib_ip4opt_rr;
typedef const netwib_ip4opt_rr netwib_constip4opt_rr;
typedef struct {
netwib_uint32 storagesize; /* 0 to 9 */
netwib_uint32 usedvalues; /* 0 to storagesize */
#define NETWIB_IP4OPT_SRR_IP_LEN 9
netwib_ip ip[NETWIB_IP4OPT_SRR_IP_LEN];
} netwib_ip4opt_srr;
typedef const netwib_ip4opt_srr netwib_constip4opt_srr;
typedef enum {
NETWIB_IP4OPT_TIMEFLAG_TS = 0,
NETWIB_IP4OPT_TIMEFLAG_IPTS = 1,
NETWIB_IP4OPT_TIMEFLAG_IPPTS = 3
} netwib_ip4opt_timeflag;
typedef struct {
netwib_uint32 storagesize; /* 0 to 4or9 (4 for ipts/ippts; 9 for ts) */
netwib_uint32 storedvalues; /* 0 to storeagesize */
netwib_uint8 overflow;
netwib_ip4opt_timeflag flag;
#define NETWIB_IP4OPT_TIME_IP_LEN 4
netwib_ip ip[NETWIB_IP4OPT_TIME_IP_LEN];
#define NETWIB_IP4OPT_TIME_TIMESTAMP_LEN 9
netwib_uint32 timestamp[NETWIB_IP4OPT_TIME_TIMESTAMP_LEN];
} netwib_ip4opt_time;
typedef const netwib_ip4opt_time netwib_constip4opt_time;
typedef struct {
netwib_ip4opttype type;
union {
/* type end : no value */
/* type noop : no value */
netwib_ip4opt_rr rr;
netwib_ip4opt_time time;
/* type security : NI */
netwib_ip4opt_srr lsrr;
/* type stream : NI */
netwib_ip4opt_srr ssrr;
} opt;
} netwib_ip4opt;
typedef const netwib_ip4opt netwib_constip4opt;
/*-------------------------------------------------------------*/
/* Name : netwib_ip4opt_initdefault
Description :
Initialize a netwib_ip4opt with default values.
Input parameter(s) :
Input/output parameter(s) :
Output parameter(s) :
*pip4opt : netwib_ip4opt to initialize
Normal return values :
NETWIB_ERR_OK : ok
*/
netwib_err netwib_ip4opt_initdefault(netwib_ip4opttype ip4opttype,
netwib_ip4opt *pip4opt);
/*-------------------------------------------------------------*/
/* Name : netwib_pkt_append_ip4opt
Description :
Initialize physical data from a netwib_ip4opt.
Input parameter(s) :
ip4opt : netwib_ip4opt
Input/output parameter(s) :
*ppht : buffer to initialize
Output parameter(s) :
Normal return values :
NETWIB_ERR_OK : ok
*/
netwib_err netwib_pkt_append_ip4opt(netwib_constip4opt *pip4opt,
netwib_buf *ppkt);
netwib_err netwib_pkt_prepend_ip4opt(netwib_constip4opt *pip4opt,
netwib_buf *ppkt);
/*-------------------------------------------------------------*/
/* Name : netwib_pkt_decode_ip4opt
Description :
Decode a netwib_ip4opt from data coming from wire.
Input parameter(s) :
*ppkt : buffer containing physical data
Input/output parameter(s) :
Output parameter(s) :
*pip4opt : netwib_ip4opt to initialize
*pskipsize : size to skip this option
Normal return values :
NETWIB_ERR_OK : ok
*/
netwib_err netwib_pkt_decode_ip4opt(netwib_constbuf *ppkt,
netwib_ip4opt *pip4opt,
netwib_uint32 *pskipsize);