netwib doc_html (version 5.39.0)

## main index

## section index

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

## main index

## section index