1 2 /*-------------------------------------------------------------*/ 3 /* Ethernet header (NETWIB_DEVICE_DLTTYPE_EN10MB) */ 4 typedef enum { 5 NETWIB_ETHERHDRTYPE_IP4 = 0x0800, 6 NETWIB_ETHERHDRTYPE_ARP = 0x0806, 7 NETWIB_ETHERHDRTYPE_VINES = 0x0bad, 8 NETWIB_ETHERHDRTYPE_TRAIN = 0x1984, 9 NETWIB_ETHERHDRTYPE_CDP = 0x2000, 10 NETWIB_ETHERHDRTYPE_RARP = 0x8035, 11 NETWIB_ETHERHDRTYPE_ATALK = 0x809b, 12 NETWIB_ETHERHDRTYPE_AARP = 0x80f3, 13 NETWIB_ETHERHDRTYPE_VLAN = 0x8100, 14 NETWIB_ETHERHDRTYPE_IPX = 0x8137, 15 NETWIB_ETHERHDRTYPE_IP6 = 0x86DD, 16 NETWIB_ETHERHDRTYPE_PPPOED = 0x8863, 17 NETWIB_ETHERHDRTYPE_PPPOES = 0x8864, 18 NETWIB_ETHERHDRTYPE_LOOP = 0x9000 19 } netwib_etherhdrtype; 20 typedef struct { 21 netwib_eth dst; 22 netwib_eth src; 23 netwib_etherhdrtype type; 24 } netwib_etherhdr; 25 typedef const netwib_etherhdr netwib_constetherhdr; 26 #define NETWIB_ETHERHDR_LEN 14 27 28 /*-------------------------------------------------------------*/ 29 /* NULL header (NETWIB_DEVICE_DLTTYPE_NULL) */ 30 typedef struct { 31 netwib_etherhdrtype type; 32 } netwib_nullhdr; 33 typedef const netwib_nullhdr netwib_constnullhdr; 34 #define NETWIB_NULLHDR_LEN 4 35 36 /*-------------------------------------------------------------*/ 37 /* LOOP header (NETWIB_DEVICE_DLTTYPE_LOOP) */ 38 typedef struct { 39 netwib_etherhdrtype type; 40 } netwib_loophdr; 41 typedef const netwib_loophdr netwib_constloophdr; 42 #define NETWIB_LOOPHDR_LEN 4 43 44 /*-------------------------------------------------------------*/ 45 /* RAW header (NETWIB_DEVICE_DLTTYPE_RAW) */ 46 #define NETWIB_RAWHDR_LEN 0 47 48 /*-------------------------------------------------------------*/ 49 /* PPP header (NETWIB_DEVICE_DLTTYPE_PPP) */ 50 typedef enum { 51 NETWIB_PPPHDRPROTO_IP4 = 0x0021, /* Internet Protocol */ 52 NETWIB_PPPHDRPROTO_AT = 0x0029, /* AppleTalk Protocol */ 53 NETWIB_PPPHDRPROTO_IPX = 0x002b, /* IPX protocol */ 54 NETWIB_PPPHDRPROTO_VJC_COMP = 0x002d, /* VJ compressed TCP */ 55 NETWIB_PPPHDRPROTO_VJC_UNCOMP = 0x002f, /* VJ uncompressed TCP */ 56 NETWIB_PPPHDRPROTO_IP6 = 0x0057, /* Internet Protocol Version 6 */ 57 NETWIB_PPPHDRPROTO_COMP = 0x00fd, /* compressed packet */ 58 NETWIB_PPPHDRPROTO_IPCP = 0x8021, /* IP Control Protocol */ 59 NETWIB_PPPHDRPROTO_ATCP = 0x8029, /* AppleTalk Control Protocol */ 60 NETWIB_PPPHDRPROTO_IPXCP = 0x802b, /* IPX Control Protocol */ 61 NETWIB_PPPHDRPROTO_IP6CP = 0x8057, /* IPv6 Control Protocol */ 62 NETWIB_PPPHDRPROTO_CCP = 0x80fd, /* Compression Control Protocol */ 63 NETWIB_PPPHDRPROTO_LCP = 0xc021, /* Link Control Protocol */ 64 NETWIB_PPPHDRPROTO_PAP = 0xc023, /* Password Authentication Proto */ 65 NETWIB_PPPHDRPROTO_LQR = 0xc025, /* Link Quality Report protocol */ 66 NETWIB_PPPHDRPROTO_CHAP = 0xc223, /* Crypto. Handshake Auth. P. */ 67 NETWIB_PPPHDRPROTO_CBCP = 0xc029 /* Callback Control Protocol */ 68 } netwib_ppphdrproto; 69 typedef struct { 70 netwib_byte address; 71 netwib_byte control; 72 netwib_ppphdrproto protocol; 73 } netwib_ppphdr; 74 typedef const netwib_ppphdr netwib_constppphdr; 75 #define NETWIB_PPPHDR_LEN 4 76 77 /*-------------------------------------------------------------*/ 78 /* LINUX_SLL header (NETWIB_DEVICE_DLTTYPE_LINUX_SLL) */ 79 typedef enum { 80 NETWIB_LINUXSLLHDRPKTTYPE_HOST = 0, 81 NETWIB_LINUXSLLHDRPKTTYPE_BROADCAST = 1, 82 NETWIB_LINUXSLLHDRPKTTYPE_MULTICAST = 2, 83 NETWIB_LINUXSLLHDRPKTTYPE_OTHERHOST = 3, 84 NETWIB_LINUXSLLHDRPKTTYPE_OUTGOING = 4 85 } netwib_linuxsllhdrpkttype; 86 typedef enum { 87 NETWIB_LINUXSLLHDRHATYPE_NETROM = 0, 88 NETWIB_LINUXSLLHDRHATYPE_ETHER = 1 89 } netwib_linuxsllhdrhatype; 90 typedef struct { 91 netwib_linuxsllhdrpkttype pkttype; /* packet type */ 92 netwib_linuxsllhdrhatype hatype; /* link-layer address type */ 93 netwib_uint16 halen; /* link-layer address length */ 94 netwib_byte srcaddr[8]; /* link-layer address */ 95 netwib_etherhdrtype protocol; /* protocol */ 96 } netwib_linuxsllhdr; 97 typedef const netwib_linuxsllhdr netwib_constlinuxsllhdr; 98 #define NETWIB_LINUXSLLHDR_LEN 16 99 100 /*-------------------------------------------------------------*/ 101 /* Link header */ 102 typedef struct { 103 netwib_device_dlttype type; 104 union { 105 netwib_etherhdr ether; 106 netwib_nullhdr null; 107 netwib_loophdr loop; 108 /* no netwib_rawhdr needed */ 109 netwib_ppphdr ppp; 110 netwib_linuxsllhdr linuxsll; 111 } hdr; 112 } netwib_linkhdr; 113 typedef const netwib_linkhdr netwib_constlinkhdr; 114 #define NETWIB_LINKHDR_MAXLEN NETWIB_LINUXSLLHDR_LEN 115 116 /*-------------------------------------------------------------*/ 117 /* Name : netwib_linkhdr_initdefault 118 Description : 119 Initialize a netwib_linkhdr with default values. 120 Input parameter(s) : 121 type : header type 122 Input/output parameter(s) : 123 Output parameter(s) : 124 *plinkhdr : netwib_linkhdr to initialize 125 Normal return values : 126 NETWIB_ERR_OK : ok 127 */ 128 netwib_err netwib_linkhdr_initdefault(netwib_device_dlttype type, 129 netwib_linkhdr *plinkhdr); 130 131 /*-------------------------------------------------------------*/ 132 /* Name : netwib_pkt_append_linkhdr 133 Description : 134 Initialize physical data from a netwib_linkhdr. 135 Input parameter(s) : 136 linkhdr : netwib_linkhdr 137 Input/output parameter(s) : 138 *ppht : buffer to initialize 139 Output parameter(s) : 140 Normal return values : 141 NETWIB_ERR_OK : ok 142 */ 143 netwib_err netwib_pkt_append_linkhdr(netwib_constlinkhdr *plinkhdr, 144 netwib_buf *ppkt); 145 netwib_err netwib_pkt_prepend_linkhdr(netwib_constlinkhdr *plinkhdr, 146 netwib_buf *ppkt); 147 148 /*-------------------------------------------------------------*/ 149 /* Name : netwib_pkt_decode_linkhdr 150 Description : 151 Decode a netwib_linkhdr from data coming from wire. 152 Input parameter(s) : 153 dlttype : DLT type of packet 154 *ppkt : buffer containing physical data 155 Input/output parameter(s) : 156 Output parameter(s) : 157 *plinkhdr : netwib_linkhdr to initialize 158 *pskipsize : size to skip this header 159 Normal return values : 160 NETWIB_ERR_OK : ok 161 */ 162 netwib_err netwib_pkt_decode_linkhdr(netwib_device_dlttype dlttype, 163 netwib_constbuf *ppkt, 164 netwib_linkhdr *plinkhdr, 165 netwib_uint32 *pskipsize); 166 167 /*-------------------------------------------------------------*/ 168 /*************************************************************** 169 * Link headers are horribly incompatible. The only field * 170 * which can be considered as compatible is the type/protocol. * 171 * Following functions permit to set/get it from header. * 172 * Type netwib_linkhdrproto is the generic type. * 173 ***************************************************************/ 174 typedef enum { 175 NETWIB_LINKHDRPROTO_UNKNOWN = 0, 176 NETWIB_LINKHDRPROTO_IP4, 177 NETWIB_LINKHDRPROTO_IP6, 178 NETWIB_LINKHDRPROTO_ARP, 179 NETWIB_LINKHDRPROTO_RARP, 180 NETWIB_LINKHDRPROTO_IPX 181 } netwib_linkhdrproto; 182 netwib_err netwib_linkhdr_set_proto(netwib_linkhdr *plinkhdr, 183 netwib_linkhdrproto linkhdrproto); 184 netwib_err netwib_linkhdr_get_proto(netwib_constlinkhdr *plinkhdr, 185 netwib_linkhdrproto *plinkhdrproto); 186