7c68db74301878bf4a5fb085203602a5679c5c3d
[mw/micromonitor-lm32.git] / umon_main / target / common / ether.h
1 /* 
2  * This file is a single "contains-all" header file to support different
3  * components of ethernet/IP along with the peer and upper layer protocols
4  * like ICMP, UDP, TFTP, DHCP etc...
5  *
6  *      General notice:
7  *      This code is part of a boot-monitor package developed as a generic base
8  *      platform for embedded system designs.  As such, it is likely to be
9  *      distributed to various projects beyond the control of the original
10  *      author.  Please notify the author of any enhancements made or bugs found
11  *      so that all may benefit from the changes.  In addition, notification back
12  *      to the author will allow the new user to pick up changes that may have
13  *      been made by other users after this version of the code was distributed.
14  *
15  *      Note1: the majority of this code was edited with 4-space tabs.
16  *      Note2: as more and more contributions are accepted, the term "author"
17  *                 is becoming a mis-representation of credit.
18  *
19  *      Original author:        Ed Sutter
20  *      Email:                          esutter@lucent.com
21  *      Phone:                          908-582-2351
22  */
23
24 #ifndef _ETHER_H_
25 #define _ETHER_H_
26
27 #define __PACKED__      __attribute__ ((packed))
28
29 #ifndef INCLUDE_MONCMD
30 #define INCLUDE_MONCMD INCLUDE_ETHERNET
31 #endif
32
33 #ifndef INCLUDE_ETHERVERBOSE
34 #define INCLUDE_ETHERVERBOSE INCLUDE_ETHERNET
35 #endif
36
37 /************************************************************************
38  *
39  * Default MAC & IP addresses...
40  * 
41  */
42
43 #ifndef DEFAULT_ETHERADD
44 #define DEFAULT_ETHERADD "00:00:00:00:00:00"
45 #endif
46
47 #ifndef DEFAULT_IPADD
48 #define DEFAULT_IPADD "0.0.0.0"
49 #endif
50
51 /************************************************************************
52  *
53  * Retransmission delay stuff...
54  * 
55  */
56
57 #define DELAY_INIT_ARP                  1
58 #define DELAY_INIT_DHCP                 2
59 #define DELAY_INIT_TFTP                 3
60 #define DELAY_INCREMENT                 4
61 #define DELAY_RETURN                    5
62 #define DELAY_OR_TIMEOUT_RETURN 6
63 #define RETRANSMISSION_TIMEOUT  -1
64 #define RETRANSMISSION_ACTIVE   1
65
66 /************************************************************************
67  *
68  * Ethernet stuff...
69  * 
70  */
71    
72 struct ether_addr {
73         unsigned char  ether_addr_octet[6];
74 } __PACKED__ ;
75  
76 struct  ether_header {
77         struct  ether_addr ether_dhost;
78         struct  ether_addr ether_shost;
79         unsigned short ether_type;
80 } __PACKED__ ;
81 #define ETHERSIZE       sizeof(struct ether_header)
82  
83 #define ETHERTYPE_PUP           0x0200          /* PUP protocol */
84 #define ETHERTYPE_IP            0x0800          /* IP protocol */
85 #define ETHERTYPE_ARP           0x0806          /* Addr resolution protocol */
86 #define ETHERTYPE_REVARP        0x8035          /* Reverse ARP */
87
88 #define ETHER_MINPKT                    64
89
90 /************************************************************************
91  *
92  * ARP/RARP stuff...
93  *
94  */
95
96 #define SIZEOFARPCACHE  8
97
98 #define ARPSIZE (sizeof(struct ether_header) + sizeof(struct arphdr))
99
100 struct arphdr {
101         unsigned short  hardware;               /* 1 for ethernet */
102         unsigned short  protocol;
103         unsigned char   hlen;
104         unsigned char   plen;
105         unsigned short  operation;      
106         unsigned char   senderha[6];
107         unsigned char   senderia[4];
108         unsigned char   targetha[6];
109         unsigned char   targetia[4];
110 } __PACKED__ ;
111
112 /* ARP/RARP operations:. */
113 #define ARP_REQUEST             1
114 #define ARP_RESPONSE    2
115 #define RARP_REQUEST    3
116 #define RARP_RESPONSE   4
117
118 /************************************************************************
119  *
120  * IP stuff...
121  *
122  */
123
124 struct in_addr {
125         unsigned long s_addr;
126 } __PACKED__ ;
127
128 #define getIP_V(x)              ((x)>>4) 
129 #define getIP_HL(x)             ((x)&0xf)
130 #define IP_DONTFRAG             0x4000                  /* dont fragment flag */
131 #define IP_MOREFRAGS    0x2000                  /* more fragments flag */
132 #define IP_VER                  0x4
133 #define IP_HDR_LEN              (sizeof(struct ip)>>2)
134 #define IP_HDR_VER_LEN  ((IP_VER<<4)|IP_HDR_LEN)
135 #define IP_HLEN(ihdr)   ((ihdr->ip_vhl&0x0f)<<2)
136
137 struct ip {
138         unsigned char  ip_vhl;          /* version & header length */
139         unsigned char  ip_tos;          /* type of service */
140         short  ip_len;                          /* total length */
141         unsigned short ip_id;           /* identification */
142         short  ip_off;                          /* fragment offset field */
143         unsigned char  ip_ttl;          /* time to live */
144         unsigned char  ip_p;            /* protocol */
145         unsigned short ip_sum;          /* checksum */
146         struct in_addr ip_src;          /* source address */
147         struct in_addr ip_dst;          /* dest address */
148 } __PACKED__ ;
149 #define IPSIZE  sizeof(struct ip)
150
151 /* ip protocols */
152 #define IP_IP   0
153 #define IP_ICMP 1
154 #define IP_IGMP 2
155 #define IP_GGP  3
156 #define IP_TCP  6
157 #define IP_PUP  12
158 #define IP_UDP  17
159
160 /************************************************************************
161  *
162  * ICMP stuff...
163  * 
164  */
165
166 #define ICMP_UNREACHABLESIZE (sizeof(struct ether_header) + \
167         sizeof(struct ip) + sizeof(struct icmp_unreachable_hdr) + datalen)
168 #define ICMP_TIMERQSTSIZE (sizeof(struct ether_header) + \
169         sizeof(struct ip) + sizeof(struct icmp_time_hdr))
170 #define ICMP_ECHORQSTSIZE (sizeof(struct ether_header) + \
171         sizeof(struct ip) + sizeof(struct icmp_echo_hdr))
172
173 #define INVALID_TIMESTAMP 0xffffffff
174 #define NONSTANDARD_TIMESTAMP 0x80000000
175
176 /* ICMP protocol header.
177  */
178 struct icmp_hdr {
179         unsigned char   type;           /* type of message */
180         unsigned char   code;           /* type subcode */
181         unsigned short  cksum;          /* ones complement cksum of struct */
182 } __PACKED__ ;
183
184 /* ICMP time request.
185  */
186 struct icmp_time_hdr {
187         unsigned char   type;           /* type of message */
188         unsigned char   code;           /* type subcode */
189         unsigned short  cksum;          /* ones complement cksum of struct */
190         unsigned short  id;                     /* identifier */
191         unsigned short  seq;            /* sequence number */
192         unsigned long   orig;           /* originate timestamp */
193         unsigned long   recv;           /* receive timestamp */
194         unsigned long   xmit;           /* transmit timestamp */
195 } __PACKED__ ;
196
197 /* ICMP echo reply.
198  */
199 struct icmp_echo_hdr {
200         unsigned char   type;           /* type of message */
201         unsigned char   code;           /* type subcode */
202         unsigned short  cksum;          /* ones complement cksum of struct */
203         unsigned short  id;                     /* identifier */
204         unsigned short  seq;            /* sequence number */
205 } __PACKED__ ;
206
207 struct icmp_unreachable_hdr {
208         unsigned char   type;           /* type of message */
209         unsigned char   code;           /* type subcode */
210         unsigned short  cksum;          /* ones complement cksum of struct */
211         unsigned short unused1;         /* Is alway zero */
212         unsigned short unused2;         /* Is alway zero */
213 } __PACKED__ ;
214
215 /* ICMP types
216  */
217 #define ICMP_ECHOREPLY                  0
218 #define ICMP_DESTUNREACHABLE    3
219 #define ICMP_SOURCEQUENCH               4
220 #define ICMP_REDIRECT                   5
221 #define ICMP_ECHOREQUEST                8
222 #define ICMP_TIMEEXCEEDED               11
223 #define ICMP_PARAMPROBLEM               12
224 #define ICMP_TIMEREQUEST                13
225 #define ICMP_TIMEREPLY                  14
226 #define ICMP_INFOREQUEST                15
227 #define ICMP_INFOREPLY                  16
228 #define ICMP_ADDRMASKREQUEST    17
229 #define ICMP_ADDRMASKREPLY              18
230
231 /* A few unreachable codes.
232  */
233 #define ICMP_UNREACHABLE_PROTOCOL                       2
234 #define ICMP_UNREACHABLE_PORT                       3
235 #define ICMP_DEST_UNREACHABLE_MAX_CODE          12
236
237 /************************************************************************
238  *
239  * UDP stuff...
240  *
241  */
242
243 /* UDP protocol header.
244  */
245 struct Udphdr {
246         unsigned short  uh_sport;               /* source port */
247         unsigned short  uh_dport;               /* destination port */
248         unsigned short  uh_ulen;                /* udp length */
249         unsigned short  uh_sum;                 /* udp checksum */
250 } __PACKED__ ;
251 #define UDPSIZE sizeof(struct Udphdr)
252
253 /* UDP pseudo header.
254  */
255 struct UdpPseudohdr {
256         struct in_addr ip_src;          /* source address */
257         struct in_addr ip_dst;          /* dest address */
258         unsigned char   zero;           /* fixed to zero */
259         unsigned char   proto;          /* protocol */
260         unsigned short  ulen;           /* udp length */
261 } __PACKED__ ;
262
263 #define UDP_OPEN        2
264 #define UDP_DATA        3
265 #define UDP_ACK         4
266 #define UDP_TTL         0x3c
267
268 /************************************************************************
269  *
270  * IGMP stuff...
271  *
272  */
273
274 /* IGMP protocol header.
275  */
276 struct Igmphdr {
277         unsigned char   type;           /* IGMP message type */
278         unsigned char   mrt;            /* Max response time */
279         unsigned short  csum;           /* Checksum of IGMP header */
280         unsigned long   group;          /* Multicast group ip */
281 } __PACKED__ ;
282
283 #define IGMPSIZE        sizeof(struct Igmphdr)
284
285 #define IGMPTYPE_QUERY          0x11
286 #define IGMPTYPE_REPORTV1       0x12
287 #define IGMPTYPE_REPORTV2       0x16
288 #define IGMPTYPE_JOIN           IGMPTYPE_REPORTV2
289 #define IGMPTYPE_LEAVE          0x17
290
291 #define ALL_HOSTS                               0xe0000001              /* 224.0.0.1 */
292 #define ALL_MULTICAST_ROUTERS   0xe0000002              /* 224.0.0.2 */
293
294 #define IGMP_JOINRQSTSIZE (sizeof(struct ether_header) + \
295         sizeof(struct ip) + sizeof(long) + sizeof(struct Igmphdr))
296
297 /************************************************************************
298  *
299  * TFTP stuff...
300  *
301  */
302
303 /* TFTP state values:
304  */
305 #define TFTPOFF                 0
306 #define TFTPIDLE                1
307 #define TFTPACTIVE              2
308 #define TFTPERROR               3
309 #define TFTPSENTRRQ             4
310 #define TFTPTIMEOUT             5
311 #define TFTPHOSTERROR   6
312
313 /* TFTP opcode superset (see Stevens pg 466)
314  */
315 #define TFTP_RRQ                1
316 #define TFTP_WRQ                2
317 #define TFTP_DAT                3
318 #define TFTP_ACK                4
319 #define TFTP_ERR                5
320 #define TFTP_OACK               6       /* RFC2347: Option Acknowledgement opcode. */
321
322 /* TFTP is UDP port 69... (see Stevens pg 206)
323  */
324 #define IPPORT_TFTP                     69
325 #define IPPORT_TFTPSRC          8888
326
327 #define TFTP_NETASCII_WRQ       1
328 #define TFTP_NETASCII_RRQ       2
329 #define TFTP_OCTET_WRQ          3
330 #define TFTP_OCTET_RRQ          4
331 #define TFTP_DATAMAX            512
332 #define TFTP_PKTOVERHEAD        (ETHERSIZE + IPSIZE + UDPSIZE)
333 #define TFTPACKSIZE                     (TFTP_PKTOVERHEAD + 4)
334
335 /************************************************************************
336  *
337  * DHCP stuff...
338  * See RFCs 2131 & 2132 for more details.
339  * Note that the values used for dhcpstate enum are based on the state
340  * diagram in 3rd Edition Comer pg 375.  Plus a few more so that I can
341  * used the same enum for DHCP and BOOTP.
342  *
343  */
344
345 #define BOOTPSIZE (sizeof(struct ether_header) + sizeof(struct ip) + \
346         sizeof(struct Udphdr) + sizeof(struct bootphdr))
347
348 #define DHCPSIZE (sizeof(struct ether_header) + sizeof(struct ip) + \
349         sizeof(struct Udphdr) + sizeof(struct dhcphdr))
350
351 #define IPPORT_DHCP_SERVER      67
352 #define IPPORT_DHCP_CLIENT      68
353
354 #define DHCPBOOTP_REQUEST       1
355 #define DHCPBOOTP_REPLY         2
356
357 #define USE_NULL                        0
358 #define USE_DHCP                        1
359 #define USE_BOOTP                       2
360
361 #define DHCP_VERBOSE    (SHOW_DHCP|SHOW_INCOMING|SHOW_OUTGOING|SHOW_BROADCAST)
362
363 /* DHCP Message types:
364  */
365 #define DHCPDISCOVER    1
366 #define DHCPOFFER               2
367 #define DHCPREQUEST             3
368 #define DHCPDECLINE             4
369 #define DHCPACK                 5
370 #define DHCPNACK                6
371 #define DHCPRELEASE             7
372 #define DHCPUNKNOWN             99
373
374 /* DHCPState (short) values: (upper bit set = bootp)
375  */
376 #define DHCPSTATE_INITIALIZE            0x0001
377 #define DHCPSTATE_INITDELAY                     0x0002
378 #define DHCPSTATE_SELECT                        0x0003
379 #define DHCPSTATE_REQUEST                       0x0004
380 #define DHCPSTATE_BOUND                         0x0005
381 #define DHCPSTATE_RENEW                         0x0006
382 #define DHCPSTATE_REBIND                        0x0007
383 #define DHCPSTATE_NOTUSED                       0x0008
384 #define DHCPSTATE_RESTART                       0x0009
385 #define BOOTP_MODE                                      0x8000
386 #define BOOTPSTATE_INITIALIZE           0x8001
387 #define BOOTPSTATE_INITDELAY            0x8002
388 #define BOOTPSTATE_REQUEST                      0x8003
389 #define BOOTPSTATE_RESTART                      0x8004
390 #define BOOTPSTATE_COMPLETE                     0x8005
391
392 /* DHCP Options
393  */
394 #define DHCPOPT_SUBNETMASK                      1
395 #define DHCPOPT_ROUTER                          3
396 #define DHCPOPT_HOSTNAME                        12
397 #define DHCPOPT_ROOTPATH                        17
398 #define DHCPOPT_BROADCASTADDRESS        28
399 #define DHCPOPT_VENDORSPECIFICINFO      43
400 #define DHCPOPT_REQUESTEDIP                     50
401 #define DHCPOPT_LEASETIME                       51
402 #define DHCPOPT_MESSAGETYPE                     53
403 #define DHCPOPT_SERVERID                        54
404 #define DHCPOPT_PARMRQSTLIST            55
405 #define DHCPOPT_CLASSID                         60
406 #define DHCPOPT_CLIENTID                        61
407 #define DHCPOPT_NISDOMAINNAME           64
408 #define DHCPOPT_NISSERVER                       65
409
410 #define STANDARD_MAGIC_COOKIE           0x63825363              /* 99.130.83.99 */
411
412 struct dhcphdr {
413         unsigned char   op;
414         unsigned char   htype;
415         unsigned char   hlen;
416         unsigned char   hops;
417         unsigned long   transaction_id;
418         unsigned short  seconds;
419         unsigned short  flags;
420         unsigned long   client_ip;
421         unsigned long   your_ip;
422         unsigned long   server_ip;
423         unsigned long   router_ip;
424         unsigned char   client_macaddr[16];
425         unsigned char   server_hostname[64];
426         unsigned char   bootfile[128];
427         unsigned long   magic_cookie;
428         /* Dhcp options would start here */
429 } __PACKED__ ;
430
431 struct bootphdr {
432         unsigned char   op;
433         unsigned char   htype;
434         unsigned char   hlen;
435         unsigned char   hops;
436         unsigned long   transaction_id;
437         unsigned short  seconds;
438         unsigned short  unused;
439         unsigned long   client_ip;
440         unsigned long   your_ip;
441         unsigned long   server_ip;
442         unsigned long   router_ip;
443         unsigned char   client_macaddr[16];
444         unsigned char   server_hostname[64];
445         unsigned char   bootfile[128];
446         unsigned char   vsa[64];
447 } __PACKED__ ;
448
449 unsigned char *DhcpGetOption(unsigned char, unsigned char *);
450
451 /************************************************************************
452  * 
453  * DNS stuff...
454  *
455  * The area of the dnshdr structure beginning with the question array
456  * is actually a variable sized area for four sections:
457  *  question, answer, authority and additional information.
458  * For the monitor's implementation of DNS, it is simplified to need
459  * only the question section because we are only using this to do
460  * a standard DNS query (give a domain name to a server and wait for
461  * a response that has the IP address).
462  * So, for the sake of building a fixed size structure, we allocate a
463  * 64 byte question section and assume that no single domain name request
464  * will exceed that length.
465  * Note: first byte of domain name is the size.
466  */
467 #define MAX_DOMAIN_NAME_SIZE    63
468
469 struct dnshdr {
470         unsigned short  id;
471         unsigned short  param;
472         unsigned short  num_questions;
473         unsigned short  num_answers;
474         unsigned short  num_authority;  
475         unsigned short  num_additional;
476         unsigned char   question[MAX_DOMAIN_NAME_SIZE+1];
477 } __PACKED__ ;
478
479
480 /************************************************************************
481  *
482  * TCP stuff...
483  *
484  */
485
486 struct  tcphdr {
487         unsigned short  sport;                          /* Source port */
488         unsigned short  dport;                          /* Source port */
489         unsigned long   seqno;                          /* Sequence number */
490         unsigned long   ackno;                          /* Acknowledgment number */
491         unsigned short  flags;                          /* Flags (lower 6 bits) */
492         unsigned short  windowsize;                     /* Window size */
493         unsigned short  tcpcsum;                        /* TCP checksum */
494         unsigned short  urgentptr;                      /* Urgent pointer */
495 /*      options (if any) & data (if any) follow */
496 } __PACKED__ ;
497
498 /* Masks for flags (made up of flag bits, reserved bits & header length):
499  */
500 #define TCP_FLAGMASK    0x003F
501 #define TCP_RSVDMASK    0x0FC0
502 #define TCP_HDRLENMASK  0xF000
503 #define TCP_HLEN(tp)    (((tp)->flags & TCP_HDRLENMASK) >> 10)
504
505 /* Masks for flag bits within flags member:
506  */
507 #define TCP_FINISH                      0x0001
508 #define TCP_SYNC                        0x0002
509 #define TCP_RESET                       0x0004
510 #define TCP_PUSH                        0x0008
511 #define TCP_ACK                         0x0010
512 #define TCP_URGENT                      0x0020
513
514
515 /************************************************************************
516  *
517  * Miscellaneous...
518  *
519  */
520
521 /* Port that is used to issue monitor commands through ethernet.
522  */
523 #define MONRESPSIZE (sizeof(struct ether_header) + sizeof(struct ip) + \
524         sizeof(struct Udphdr) + idx)
525 #define IPPORT_MONCMD           777
526 #define IPPORT_GDB                      1234
527
528 /* Verbosity levels used by various ethernet layers:
529  */
530 #define SHOW_INCOMING           0x00000001
531 #define SHOW_OUTGOING           0x00000002
532 #define SHOW_HEX                        0x00000004
533 #define SHOW_BROADCAST          0x00000008
534 #define SHOW_TFTP_TICKER        0x00000010
535 #define SHOW_DHCP                       0x00000020
536 #define SHOW_ARP                        0x00000040
537 #define SHOW_ASCII                      0x00000080
538 #define SHOW_BADCSUM            0x00000100
539 #define SHOW_BADCSUMV           0x00000200
540 #define SHOW_PHY                        0x00000400
541 #define SHOW_GDB                        0x00000800
542 #define SHOW_TFTP_STATE         0x00001000
543 #define SHOW_DRIVER_DEBUG       0x00002000
544 #define SHOW_ALL                        0xffffffff
545
546 #define ENET_DEBUG_ENABLED() (EtherVerbose & SHOW_DRIVER_DEBUG)
547
548 #define ETHER_INCOMING  1
549 #define ETHER_OUTGOING  2
550
551 extern  char *Etheradd, *IPadd;
552 extern  unsigned char etheraddr[], ipaddr[];
553 extern  unsigned short MoncmdPort, TftpPort, TftpSrcPort;
554 extern  unsigned short DhcpClientPort, DhcpServerPort, DHCPState;
555 extern  int EtherVerbose, IPMonCmdActive, EtherIsActive, EtherPollingOff;
556 extern  unsigned char BinEnetAddr[], BinIpAddr[];
557 extern  unsigned char AllZeroAddr[], BroadcastAddr[];
558 extern  int EtherXFRAMECnt, EtherRFRAMECnt, EtherIPERRCnt, EtherUDPERRCnt;
559
560 extern  int     getAddresses(void);
561 extern  int IpToBin(char *,unsigned char *);
562 extern  int EtherToBin(char *,unsigned char *);
563 extern  char *extGetIpAdd(void), *extGetEtherAdd(void);
564 extern  char *IpToString(unsigned long, char *);
565 extern  char *EtherToString(unsigned char *,char *);
566 extern  unsigned short ipId(void);
567 extern  unsigned char *ArpEther(unsigned char *,unsigned char *,int);
568 extern  unsigned char *getXmitBuffer(void);
569 extern  unsigned char *EtherFromCache(unsigned char *);
570 extern  void ipChksum(struct ip *), udpChksum(struct ip *);
571 extern  void tcpChksum(struct ip *);
572 #if INCLUDE_ETHERVERBOSE
573 extern  void printPkt(struct ether_header *,int,int);
574 #else
575 #define printPkt(a,b,c)
576 #endif
577 extern  void DhcpBootpDone(int, struct dhcphdr *,int);
578 extern  void DhcpVendorSpecific(struct  dhcphdr *);
579 extern  int sendBuffer(int);
580 extern  struct  ether_header *EtherCopy(struct ether_header *);
581 extern  int ValidDHCPOffer(struct       dhcphdr *);
582 extern  int buildDhcpHdr(struct dhcphdr *);
583 extern  int printDhcpVSopt(int,int,char *);
584 extern  int RetransmitDelay(int);
585 extern  int tftpGet(unsigned long,char *,char *,char *,char *,char *,char *);
586 extern  void printDhcp(struct Udphdr *);
587 extern  int printIp(struct ip*);
588 extern  int printUdp(struct Udphdr *);
589 extern  int printIgmp(struct Igmphdr *);
590 extern  void processPACKET(struct ether_header *,unsigned short);
591 extern  void processTCP(struct ether_header *,unsigned short);
592 extern  int processTFTP(struct ether_header *,unsigned short);
593 extern  int processICMP(struct ether_header *,unsigned short);
594 extern  char *processARP(struct ether_header *,unsigned short);
595 extern  int processDHCP(struct ether_header *,unsigned short);
596 extern  int processRARP(struct ether_header *,unsigned short);
597 extern  int processGDB(struct ether_header *,unsigned short);
598 extern  int SendICMPUnreachable(struct ether_header *,unsigned char);
599 extern  void enresetmmu(void), enreset(void);
600 extern  void ShowEtherdevStats(void), ShowTftpStats(void), ShowDhcpStats(void);
601 extern  void enablePromiscuousReception(void);
602 extern  void disablePromiscuousReception(void);
603 extern  int enselftest(int), polletherdev(void), EtherdevStartup(int);
604 extern  void DisableEtherdev(void);
605 extern  void tftpStateCheck(void), dhcpStateCheck(void);
606 extern  int DhcpIPCheck(char *);
607 extern  void dhcpDisable(void);
608 extern  void tftpInit(void);
609 extern  void disableBroadcastReception(void);
610 extern  void enableBroadcastReception(void);
611 #if INCLUDE_ETHERNET
612 extern  int pollethernet(void);
613 extern  int EthernetStartup(int,int);
614 #else
615 #define pollethernet()
616 #define EthernetStartup(a,b)
617 #endif
618
619 #if INCLUDE_MONCMD
620 extern  int SendIPMonChar(unsigned char,int);
621 #else
622 #define SendIPMonChar(a,b)
623 #endif
624
625 extern  int DisableEthernet(void);
626 extern  void storeMac(int);
627 extern  void GetBinNetMask(unsigned char *binnetmask);
628 extern  int monSendEnetPkt(char *pkt, int cnt);
629 extern  int monRecvEnetPkt(char *pkt, int cnt);
630 extern  void AppPrintPkt(char *buf, int size, int incoming);
631
632 #endif