netwib doc_html (version 5.39.0)

## main index

## section index

    /*-------------------------------------------------------------*/
    /* Ethernet header (NETWIB_DEVICE_DLTTYPE_EN10MB) */
    typedef enum {
      NETWIB_ETHERHDRTYPE_IP4 =    0x0800,
      NETWIB_ETHERHDRTYPE_ARP =    0x0806,
      NETWIB_ETHERHDRTYPE_VINES =  0x0bad,
      NETWIB_ETHERHDRTYPE_TRAIN =  0x1984,
      NETWIB_ETHERHDRTYPE_CDP =    0x2000,
      NETWIB_ETHERHDRTYPE_RARP =   0x8035,
      NETWIB_ETHERHDRTYPE_ATALK =  0x809b,
      NETWIB_ETHERHDRTYPE_AARP =   0x80f3,
      NETWIB_ETHERHDRTYPE_VLAN =   0x8100,
      NETWIB_ETHERHDRTYPE_IPX =    0x8137,
      NETWIB_ETHERHDRTYPE_IP6 =    0x86DD,
      NETWIB_ETHERHDRTYPE_PPPOED = 0x8863,
      NETWIB_ETHERHDRTYPE_PPPOES = 0x8864,
      NETWIB_ETHERHDRTYPE_LOOP =   0x9000
    } netwib_etherhdrtype;
    typedef struct {
      netwib_eth dst;
      netwib_eth src;
      netwib_etherhdrtype type;
    } netwib_etherhdr;
    typedef const netwib_etherhdr netwib_constetherhdr;
    #define NETWIB_ETHERHDR_LEN 14

    /*-------------------------------------------------------------*/
    /* NULL header (NETWIB_DEVICE_DLTTYPE_NULL) */
    typedef struct {
      netwib_etherhdrtype type;
    } netwib_nullhdr;
    typedef const netwib_nullhdr netwib_constnullhdr;
    #define NETWIB_NULLHDR_LEN 4

    /*-------------------------------------------------------------*/
    /* LOOP header (NETWIB_DEVICE_DLTTYPE_LOOP) */
    typedef struct {
      netwib_etherhdrtype type;
    } netwib_loophdr;
    typedef const netwib_loophdr netwib_constloophdr;
    #define NETWIB_LOOPHDR_LEN 4

    /*-------------------------------------------------------------*/
    /* RAW header (NETWIB_DEVICE_DLTTYPE_RAW) */
    #define NETWIB_RAWHDR_LEN 0

    /*-------------------------------------------------------------*/
    /* PPP header (NETWIB_DEVICE_DLTTYPE_PPP) */
    typedef enum {
      NETWIB_PPPHDRPROTO_IP4 =     0x0021, /* Internet Protocol */
      NETWIB_PPPHDRPROTO_AT =      0x0029, /* AppleTalk Protocol */
      NETWIB_PPPHDRPROTO_IPX =     0x002b, /* IPX protocol */
      NETWIB_PPPHDRPROTO_VJC_COMP =   0x002d, /* VJ compressed TCP */
      NETWIB_PPPHDRPROTO_VJC_UNCOMP = 0x002f, /* VJ uncompressed TCP */
      NETWIB_PPPHDRPROTO_IP6 =     0x0057, /* Internet Protocol Version 6 */
      NETWIB_PPPHDRPROTO_COMP =    0x00fd, /* compressed packet */
      NETWIB_PPPHDRPROTO_IPCP =    0x8021, /* IP Control Protocol */
      NETWIB_PPPHDRPROTO_ATCP =    0x8029, /* AppleTalk Control Protocol */
      NETWIB_PPPHDRPROTO_IPXCP =   0x802b, /* IPX Control Protocol */
      NETWIB_PPPHDRPROTO_IP6CP =   0x8057, /* IPv6 Control Protocol */
      NETWIB_PPPHDRPROTO_CCP =     0x80fd, /* Compression Control Protocol */
      NETWIB_PPPHDRPROTO_LCP =     0xc021, /* Link Control Protocol */
      NETWIB_PPPHDRPROTO_PAP =     0xc023, /* Password Authentication Proto */
      NETWIB_PPPHDRPROTO_LQR =     0xc025, /* Link Quality Report protocol */
      NETWIB_PPPHDRPROTO_CHAP =    0xc223, /* Crypto. Handshake Auth. P. */
      NETWIB_PPPHDRPROTO_CBCP =    0xc029  /* Callback Control Protocol */
    } netwib_ppphdrproto;
    typedef struct {
      netwib_byte address;
      netwib_byte control;
      netwib_ppphdrproto protocol;
    } netwib_ppphdr;
    typedef const netwib_ppphdr netwib_constppphdr;
    #define NETWIB_PPPHDR_LEN 4

    /*-------------------------------------------------------------*/
    /* LINUX_SLL header (NETWIB_DEVICE_DLTTYPE_LINUX_SLL) */
    typedef enum {
      NETWIB_LINUXSLLHDRPKTTYPE_HOST = 0,
      NETWIB_LINUXSLLHDRPKTTYPE_BROADCAST = 1,
      NETWIB_LINUXSLLHDRPKTTYPE_MULTICAST = 2,
      NETWIB_LINUXSLLHDRPKTTYPE_OTHERHOST = 3,
      NETWIB_LINUXSLLHDRPKTTYPE_OUTGOING = 4
    } netwib_linuxsllhdrpkttype;
    typedef enum {
      NETWIB_LINUXSLLHDRHATYPE_NETROM = 0,
      NETWIB_LINUXSLLHDRHATYPE_ETHER = 1
    } netwib_linuxsllhdrhatype;
    typedef struct {
      netwib_linuxsllhdrpkttype pkttype;   /* packet type */
      netwib_linuxsllhdrhatype hatype;     /* link-layer address type */
      netwib_uint16 halen;                 /* link-layer address length */
      netwib_byte srcaddr[8];              /* link-layer address */
      netwib_etherhdrtype protocol;        /* protocol */
    } netwib_linuxsllhdr;
    typedef const netwib_linuxsllhdr netwib_constlinuxsllhdr;
    #define NETWIB_LINUXSLLHDR_LEN 16

    /*-------------------------------------------------------------*/
    /* Link header */
    typedef struct {
      netwib_device_dlttype type;
      union {
        netwib_etherhdr    ether;
        netwib_nullhdr     null;
        netwib_loophdr     loop;
        /* no netwib_rawhdr needed */
        netwib_ppphdr      ppp;
        netwib_linuxsllhdr linuxsll;
      } hdr;
    } netwib_linkhdr;
    typedef const netwib_linkhdr netwib_constlinkhdr;
    #define NETWIB_LINKHDR_MAXLEN NETWIB_LINUXSLLHDR_LEN

    /*-------------------------------------------------------------*/
    /* Name : netwib_linkhdr_initdefault
       Description :
         Initialize a netwib_linkhdr with default values.
       Input parameter(s) :
         type : header type
       Input/output parameter(s) :
       Output parameter(s) :
         *plinkhdr : netwib_linkhdr to initialize
       Normal return values :
         NETWIB_ERR_OK : ok
    */
    netwib_err netwib_linkhdr_initdefault(netwib_device_dlttype type,
                                          netwib_linkhdr *plinkhdr);

    /*-------------------------------------------------------------*/
    /* Name : netwib_pkt_append_linkhdr
       Description :
         Initialize physical data from a netwib_linkhdr.
       Input parameter(s) :
         linkhdr : netwib_linkhdr
       Input/output parameter(s) :
         *ppht : buffer to initialize
       Output parameter(s) :
       Normal return values :
         NETWIB_ERR_OK : ok
    */
    netwib_err netwib_pkt_append_linkhdr(netwib_constlinkhdr *plinkhdr,
                                         netwib_buf *ppkt);
    netwib_err netwib_pkt_prepend_linkhdr(netwib_constlinkhdr *plinkhdr,
                                          netwib_buf *ppkt);

    /*-------------------------------------------------------------*/
    /* Name : netwib_pkt_decode_linkhdr
       Description :
         Decode a netwib_linkhdr from data coming from wire.
       Input parameter(s) :
         dlttype : DLT type of packet
         *ppkt : buffer containing physical data
       Input/output parameter(s) :
       Output parameter(s) :
         *plinkhdr : netwib_linkhdr to initialize
         *pskipsize : size to skip this header
       Normal return values :
         NETWIB_ERR_OK : ok
    */
    netwib_err netwib_pkt_decode_linkhdr(netwib_device_dlttype dlttype,
                                         netwib_constbuf *ppkt,
                                         netwib_linkhdr *plinkhdr,
                                         netwib_uint32 *pskipsize);

    /*-------------------------------------------------------------*/
    /***************************************************************
     * Link headers are horribly incompatible. The only field      *
     * which can be considered as compatible is the type/protocol. *
     * Following functions permit to set/get it from header.       *
     * Type netwib_linkhdrproto is the generic type.               *
     ***************************************************************/
    typedef enum {
      NETWIB_LINKHDRPROTO_UNKNOWN = 0,
      NETWIB_LINKHDRPROTO_IP4,
      NETWIB_LINKHDRPROTO_IP6,
      NETWIB_LINKHDRPROTO_ARP,
      NETWIB_LINKHDRPROTO_RARP,
      NETWIB_LINKHDRPROTO_IPX
    } netwib_linkhdrproto;
    netwib_err netwib_linkhdr_set_proto(netwib_linkhdr *plinkhdr,
                                        netwib_linkhdrproto linkhdrproto);
    netwib_err netwib_linkhdr_get_proto(netwib_constlinkhdr *plinkhdr,
                                        netwib_linkhdrproto *plinkhdrproto);

## main index

## section index