Main Page | Modules | Data Structures | File List | Data Fields | Globals | Related Pages

packet.h

00001 #ifndef __PACKET_H__
00002 #define __PACKET_H__
00003 
00004 #include "bswap.h"
00005 
00006 #include <kos/net.h>
00007 
00008 //extern unsigned char pkt_buf[1514];
00009 extern unsigned char broadcast[6];
00010 extern uint8 eth_mac[6];
00011 extern uint32 our_ip;
00012 extern net_input_func lwip_cb;
00013 
00014 extern netif_t * netif;
00015 
00016 static int net_tx(const uint8 *data, int len, int mode)
00017 {
00018   if (netif) {
00019     int res;
00020     //vid_border_color(255, 0, 0);
00021     res =  netif->if_tx(netif, data, len, mode);
00022     //vid_border_color(0, 0, 0);
00023     return res;
00024   } else
00025     return 0;
00026 }
00027 
00028 #define packed __attribute__((packed))
00029 
00030 typedef struct {
00031   unsigned char dest[6] packed;
00032   unsigned char src[6]  packed;
00033   unsigned char type[2] packed;
00034 } ether_header_t;
00035 
00036 typedef struct {
00037   unsigned char version_ihl packed;
00038   unsigned char tos packed;
00039   unsigned short length packed;
00040   unsigned short packet_id packed;
00041   unsigned short flags_frag_offset packed;
00042   unsigned char ttl packed;
00043   unsigned char protocol packed;
00044   unsigned short checksum packed;
00045   unsigned int src packed;
00046   unsigned int dest packed;
00047 } ip_header_t;
00048 
00049 typedef struct {
00050   unsigned short src packed;
00051   unsigned short dest packed;
00052   unsigned short length packed;
00053   unsigned short checksum packed;
00054   unsigned char  data[1] packed;
00055 } udp_header_t;
00056 
00057 typedef struct {
00058   unsigned char type packed;
00059   unsigned char code packed;
00060   unsigned short checksum packed;
00061   unsigned int misc packed;
00062 } icmp_header_t;
00063 
00064 typedef struct {
00065   unsigned short hw_addr_space packed;
00066   unsigned short proto_addr_space packed;
00067   unsigned char hw_addr_len packed;
00068   unsigned char proto_addr_len packed;
00069   unsigned short opcode packed;
00070   unsigned char hw_sender[6] packed;
00071   unsigned char proto_sender[4] packed;
00072   unsigned char hw_target[6] packed;
00073   unsigned char proto_target[4] packed;
00074 } arp_header_t;
00075 
00076 typedef struct {
00077   unsigned int src_ip packed;
00078   unsigned int dest_ip packed;
00079   unsigned char zero packed;
00080   unsigned char protocol packed;
00081   unsigned short udp_length packed;
00082   unsigned short src_port packed;
00083   unsigned short dest_port packed;
00084   unsigned short length packed;
00085   unsigned short checksum packed;
00086   unsigned char data[1] packed;
00087 } ip_udp_pseudo_header_t;
00088 
00089 unsigned short checksum(unsigned short *buf, int count);
00090 void make_ether(char *dest, char *src, ether_header_t *ether);
00091 void make_ip(int dest, int src, int length, char protocol, ip_header_t *ip);
00092 void make_udp(unsigned short dest, unsigned short src, unsigned char * data, int length, ip_header_t *ip, udp_header_t *udp);
00093 
00094 #define ntohl bswap32
00095 #define htonl bswap32
00096 #define ntohs bswap16
00097 #define htons bswap16
00098 
00099 #define ETHER_H_LEN 14
00100 #define IP_H_LEN    20
00101 #define UDP_H_LEN   8
00102 #define ICMP_H_LEN  8
00103 #define ARP_H_LEN   28
00104 
00105 /* thread safe version of eth_tx, waiting nicely with thd_pass */
00106 int eth_txts(uint8 *pkt, int len);
00107 
00108 #endif

dcplaya documentation version 2.0 Generated on November 2004 by doxygen 1.3.6