File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / dhcdrop / src / net.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 22:25:35 2012 UTC (13 years, 4 months ago) by misho
Branches: dhcdrop, MAIN
CVS tags: v0_5, HEAD
dhcdrop

    1: /*
    2:  * net.h
    3:  *
    4:  *  Created on: 05.08.2009
    5:  *      Author: Chebotarev Roman
    6:  */
    7: 
    8: #ifndef NET_H_
    9: #define NET_H_
   10: 
   11: #pragma pack(1)
   12: 
   13: #define ETH_ALEN	6		/* Octets in one ethernet addr	 */
   14: 
   15: #define	ETHERTYPE_IP		0x0800		/* IP */
   16: #define	ETHERTYPE_ARP		0x0806		/* Address resolution */
   17: 
   18: /* 10Mb/s ethernet header */
   19: struct eth_header
   20: {
   21:   u_int8_t  ether_dhost[ETH_ALEN];	/* destination eth addr	*/
   22:   u_int8_t  ether_shost[ETH_ALEN];	/* source ether addr	*/
   23:   u_int16_t ether_type;		        /* packet type ID field	*/
   24: } __attribute__ ((__packed__));
   25: 
   26: /*
   27:  * Structure of an internet header, naked of options.
   28:  */
   29: struct iphdr
   30: {
   31: #if __BYTE_ORDER == __LITTLE_ENDIAN
   32:     unsigned int ihl:4;
   33:     unsigned int version:4;
   34: #elif __BYTE_ORDER == __BIG_ENDIAN
   35:     unsigned int version:4;
   36:     unsigned int ihl:4;
   37: #else

   38: # error "Please fix <bits/endian.h>"
   39: #endif

   40:     uint8_t tos;
   41:     uint16_t tot_len;
   42:     uint16_t id;
   43:     uint16_t frag_off;
   44:     uint8_t ttl;
   45:     uint8_t protocol;
   46:     uint16_t check;
   47:     uint32_t saddr;
   48:     uint32_t daddr;
   49:     /*The options start here. */
   50: };
   51: 
   52: /* ARP header */
   53: struct arp_header
   54: {
   55:     uint16_t	arp_hwtype;   /* Format of hardware address */
   56:     uint16_t	arp_proto;   /* Format of protocol address */
   57:     uint8_t		arp_hwlen;     /* Length of hardware address */
   58:     uint8_t 	arp_palen;     /* Length of protocol address */
   59:     uint16_t	arp_oper;      /* ARP opcode (command) */
   60: };
   61: 
   62: /* UDP header as specified by RFC 768, August 1980. */
   63: 
   64: struct pseudo_header
   65: {
   66:     unsigned int src_addr;
   67:     unsigned int dst_addr;
   68:     unsigned char zero ;
   69:     unsigned char proto;
   70:     unsigned short length;
   71: };
   72: 
   73: struct udphdr
   74: {
   75: 	uint16_t source;
   76: 	uint16_t dest;
   77: 	uint16_t len;
   78: 	uint16_t check;
   79: };
   80: 
   81: struct arp_packet_net_header
   82: {
   83: 	struct eth_header eth_head;
   84: 	struct arp_header arp_head;
   85: };
   86: 
   87: struct arp_data
   88: {
   89: 	uint8_t		from_ether[ETH_ALEN];
   90: 	uint32_t 	from_ip;
   91: 	uint8_t		to_ether[ETH_ALEN];
   92: 	uint32_t	to_ip;
   93: };
   94: 
   95: struct dhcp_packet_net_header
   96: {
   97:     struct eth_header eth_head;
   98:     struct iphdr ip_header;
   99:     struct udphdr udp_header;
  100: };
  101: 
  102: #endif /* NET_H_ */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>