⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ether.h

📁 完整的Bell实验室的嵌入式文件系统TFS
💻 H
📖 第 1 页 / 共 2 页
字号:
/* TFTP is UDP port 69... (see Stevens pg 206) */#define IPPORT_TFTP         69#define IPPORT_TFTPSRC      8888#define TFTP_NETASCII_WRQ   1#define TFTP_NETASCII_RRQ   2#define TFTP_OCTET_WRQ      3#define TFTP_OCTET_RRQ      4#define TFTP_DATAMAX        512#define TFTP_PKTOVERHEAD    (ETHERSIZE + IPSIZE + UDPSIZE)#define TFTPACKSIZE         (TFTP_PKTOVERHEAD + 4)/************************************************************************ * * DHCP stuff... * See RFCs 2131 & 2132 for more details. * Note that the values used for dhcpstate enum are based on the state * diagram in 3rd Edition Comer pg 375.  Plus a few more so that I can * used the same enum for DHCP and BOOTP. * */#define BOOTPSIZE (sizeof(struct ether_header) + sizeof(struct ip) + \    sizeof(struct Udphdr) + sizeof(struct bootphdr))#define DHCPSIZE (sizeof(struct ether_header) + sizeof(struct ip) + \    sizeof(struct Udphdr) + sizeof(struct dhcphdr))#define IPPORT_DHCP_SERVER  67#define IPPORT_DHCP_CLIENT  68#define DHCPBOOTP_REQUEST   1#define DHCPBOOTP_REPLY     2#define USE_NULL            0#define USE_DHCP            1#define USE_BOOTP           2#define DHCP_VERBOSE    (SHOW_DHCP|SHOW_INCOMING|SHOW_OUTGOING|SHOW_BROADCAST)/* DHCP Message types: */#define DHCPDISCOVER    1#define DHCPOFFER       2#define DHCPREQUEST     3#define DHCPDECLINE     4#define DHCPACK         5#define DHCPNACK        6#define DHCPRELEASE     7#define DHCPUNKNOWN     99/* DHCPState (short) values: (upper bit set = bootp) */#define DHCPSTATE_INITIALIZE        0x0001#define DHCPSTATE_SELECT            0x0002#define DHCPSTATE_REQUEST           0x0003#define DHCPSTATE_BOUND             0x0004#define DHCPSTATE_RENEW             0x0005#define DHCPSTATE_REBIND            0x0006#define DHCPSTATE_NOTUSED           0x0007#define DHCPSTATE_RESTART           0x0008#define BOOTP_MODE                  0x8000#define BOOTPSTATE_INITIALIZE       0x8001#define BOOTPSTATE_REQUEST          0x8002#define BOOTPSTATE_RESTART          0x8003#define BOOTPSTATE_COMPLETE         0x8005/* DHCP Options */#define DHCPOPT_SUBNETMASK          1#define DHCPOPT_ROUTER              3#define DHCPOPT_HOSTNAME            12#define DHCPOPT_BROADCASTADDRESS    28#define DHCPOPT_VENDORSPECIFICINFO  43#define DHCPOPT_REQUESTEDIP         50#define DHCPOPT_LEASETIME           51#define DHCPOPT_MESSAGETYPE         53#define DHCPOPT_SERVERID            54#define DHCPOPT_PARMRQSTLIST        55#define DHCPOPT_CLASSID             60#define DHCPOPT_CLIENTID            61#define DHCPOPT_NISDOMAINNAME       64#define DHCPOPT_NISSERVER           65#define STANDARD_MAGIC_COOKIE       0x63825363      /* 99.130.83.99 */struct dhcphdr {    unsigned char   op;    unsigned char   htype;    unsigned char   hlen;    unsigned char   hops;    unsigned long   transaction_id;    unsigned short  seconds;    unsigned short  flags;    unsigned long   client_ip;    unsigned long   your_ip;    unsigned long   server_ip;    unsigned long   router_ip;    unsigned char   client_macaddr[16];    unsigned char   server_hostname[64];    unsigned char   bootfile[128];    unsigned long   magic_cookie;    /* Dhcp options would start here */};struct bootphdr {    unsigned char   op;    unsigned char   htype;    unsigned char   hlen;    unsigned char   hops;    unsigned long   transaction_id;    unsigned short  seconds;    unsigned short  unused;    unsigned long   client_ip;    unsigned long   your_ip;    unsigned long   server_ip;    unsigned long   router_ip;    unsigned char   client_macaddr[16];    unsigned char   server_hostname[64];    unsigned char   bootfile[128];    unsigned char   vsa[64];};unsigned char *DhcpGetOption();/************************************************************************ *  * DNS stuff... * * The area of the dnshdr structure beginning with the question array * is actually a variable sized area for four sections: *  question, answer, authority and additional information. * For the monitor's implementation of DNS, it is simplified to need * only the question section because we are only using this to do * a standard DNS query (give a domain name to a server and wait for * a response that has the IP address). * So, for the sake of building a fixed size structure, we allocate a * 64 byte question section and assume that no single domain name request * will exceed that length. * Note: first byte of domain name is the size. */#define MAX_DOMAIN_NAME_SIZE    63struct dnshdr {    unsigned short  id;    unsigned short  param;    unsigned short  num_questions;    unsigned short  num_answers;    unsigned short  num_authority;      unsigned short  num_additional;    unsigned char   question[MAX_DOMAIN_NAME_SIZE+1];};/************************************************************************ * * TCP stuff... * */struct  tcphdr {    unsigned short  sport;              /* Source port */    unsigned short  dport;              /* Source port */    unsigned long   seqno;              /* Sequence number */    unsigned long   ackno;              /* Acknowledgment number */    unsigned short  flags;              /* Flags (lower 6 bits) */    unsigned short  windowsize;         /* Window size */    unsigned short  tcpcsum;            /* TCP checksum */    unsigned short  urgentptr;          /* Urgent pointer *//*  options (if any) & data (if any) follow */};/* Masks for flags (made up of flag bits, reserved bits & header length): */#define TCP_FLAGMASK    0x003F#define TCP_RSVDMASK    0x0FC0#define TCP_HDRLENMASK  0xF000#define TCP_HLEN(tp)    (((tp)->flags & TCP_HDRLENMASK) >> 10)/* Masks for flag bits within flags member: */#define TCP_FINISH          0x0001#define TCP_SYNC            0x0002#define TCP_RESET           0x0004#define TCP_PUSH            0x0008#define TCP_ACK             0x0010#define TCP_URGENT          0x0020/************************************************************************ * * Miscellaneous... * *//* Port that is used to issue monitor commands through ethernet. */#define MONRESPSIZE (sizeof(struct ether_header) + sizeof(struct ip) + \    sizeof(struct Udphdr) + idx)#define IPPORT_MONCMD       777/* Verbosity levels used by various ethernet layers: */#define SHOW_INCOMING   0x00000001#define SHOW_OUTGOING   0x00000002#define SHOW_HEX        0x00000004#define SHOW_BROADCAST  0x00000008#define SHOW_TFTP       0x00000010#define SHOW_DHCP       0x00000020#define SHOW_ARP        0x00000040#define SHOW_ASCII      0x00000080#define SHOW_BADCSUM    0x00000100#define SHOW_BADCSUMV   0x00000200#define SHOW_PHY        0x00000400#define SHOW_ALL        0xffffffff#define ETHER_INCOMING 1#define ETHER_OUTGOING 2extern  char *Etheradd, *IPadd;extern  unsigned char etheraddr[], ipaddr[];extern  unsigned short MoncmdPort, TftpPort, TftpSrcPort;extern  unsigned short DhcpClientPort, DhcpServerPort, DHCPState;extern  int EtherVerbose, IPMonCmdActive, EtherIsActive;extern  unsigned char BinEnetAddr[], BroadcastAddr[], BinIpAddr[];extern  int EtherXFRAMECnt, EtherRFRAMECnt, EtherIPERRCnt, EtherUDPERRCnt;extern  int pollethernet(void);extern  int getAddresses(void);extern  int IpToBin(char *,unsigned char *);extern  int EtherToBin(char *,unsigned char *);extern  char *extGetIpAdd(), *extGetEtherAdd();extern  char *IpToString(unsigned long, char *);extern  char *EtherToString(unsigned char *,char *);extern  unsigned short ipId(void);extern  unsigned char *ArpEther(unsigned char *,unsigned char *,int);extern  unsigned char *getXmitBuffer();extern  unsigned char *EtherFromCache(unsigned char *);extern  void ipChksum(struct ip *), udpChksum(struct ip *);extern  void tcpChksum(struct ip *);extern  void printPkt(struct ether_header *,int,int);extern  void printMem(unsigned char *,int);extern  void DhcpBootpDone(int, struct dhcphdr *,int);extern  void DhcpVendorSpecific(struct  dhcphdr *);extern  int sendBuffer(int);extern  struct  ether_header *EtherCopy(struct ether_header *);extern  int EthernetStartup(int,int);extern  int ValidDHCPOffer(struct   dhcphdr *);extern  int buildDhcpHdr(struct dhcphdr *);extern  int printDhcpVSopt(int,int,char *);extern  int RetransmitDelay(int);extern  int tftpGet(unsigned long,char *,char *,char *,char *,char *,char *);extern  void printDhcp(struct Udphdr *);extern  int printIp(struct ip*);extern  int printUdp(struct Udphdr *);extern  void processPACKET(struct ether_header *,unsigned short);extern  void processTCP(struct ether_header *,unsigned short);extern  int processTFTP(struct ether_header *,unsigned short);extern  int processICMP(struct ether_header *,unsigned short);extern  char *processARP(struct ether_header *,unsigned short);extern  int processDHCP(struct ether_header *,unsigned short);extern  int processRARP(struct ether_header *,unsigned short);extern  int SendICMPUnreachable(struct ether_header *,unsigned char);extern  void enresetmmu(void), enreset(void);extern  void ShowEtherdevStats(void), ShowTftpStats(void), ShowDhcpStats(void);extern  void enablePromiscuousReception(void);extern  void disablePromiscuousReception(void);extern  int enselftest(int), polletherdev(void), EtherdevStartup(int);extern  void DisableEtherdev(void);extern  void tftpStateCheck(void), dhcpStateCheck(void);extern  int DhcpIPCheck(char *);extern  void dhcpDisable(void);extern  void tftpInit(void);extern  void disableBroadcastReception();extern  void enableBroadcastReception();extern  int SendIPMonChar(unsigned char,int);extern  void DisableEthernet(void);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -