ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/BasiliskII/src/include/ether.h
Revision: 1.4
Committed: 2001-07-12T19:48:28Z (23 years, 2 months ago) by cebix
Content type: text/plain
Branch: MAIN
Changes since 1.3: +28 -4 lines
Log Message:
- Implemented AppleTalk-over-UDP tunnelling, activated by setting "udptunnel"
  to "true". This uses the BSD socket API, so it's fairly portable (currently
  only imeplemented under Unix, though). This works by sending raw Ethernet
  packets as UDP packets to a fixed port number ("udpport", default is 6066),
  using IP broadcasts to simulate Ethernet broad- and multicasts. Currently
  only tested with AppleTalk.

File Contents

# User Rev Content
1 cebix 1.1 /*
2     * ether.h - Ethernet device driver
3     *
4 cebix 1.3 * Basilisk II (C) 1997-2001 Christian Bauer
5 cebix 1.1 *
6     * This program is free software; you can redistribute it and/or modify
7     * it under the terms of the GNU General Public License as published by
8     * the Free Software Foundation; either version 2 of the License, or
9     * (at your option) any later version.
10     *
11     * This program is distributed in the hope that it will be useful,
12     * but WITHOUT ANY WARRANTY; without even the implied warranty of
13     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14     * GNU General Public License for more details.
15     *
16     * You should have received a copy of the GNU General Public License
17     * along with this program; if not, write to the Free Software
18     * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19     */
20    
21     #ifndef ETHER_H
22     #define ETHER_H
23    
24 cebix 1.4 struct sockaddr_in;
25    
26     extern void EtherInit(void);
27     extern void EtherExit(void);
28    
29 cebix 1.1 extern int16 EtherOpen(uint32 pb, uint32 dce);
30     extern int16 EtherControl(uint32 pb, uint32 dce);
31     extern void EtherReadPacket(uint8 **src, uint32 &dest, uint32 &len, uint32 &remaining);
32    
33     // System specific and internal functions/data
34     extern void EtherReset(void);
35     extern void EtherInterrupt(void);
36    
37 cebix 1.4 extern bool ether_init(void);
38     extern void ether_exit(void);
39 cebix 1.1 extern int16 ether_add_multicast(uint32 pb);
40     extern int16 ether_del_multicast(uint32 pb);
41     extern int16 ether_attach_ph(uint16 type, uint32 handler);
42     extern int16 ether_detach_ph(uint16 type);
43     extern int16 ether_write(uint32 wds);
44 cebix 1.4 extern bool ether_start_udp_thread(int socket_fd);
45     extern void ether_stop_udp_thread(void);
46     extern void ether_udp_read(uint8 *packet, int length, struct sockaddr_in *from);
47 cebix 1.1
48 cebix 1.4 extern uint8 ether_addr[6]; // Ethernet address (set by ether_init())
49 cebix 1.1
50     // Ethernet driver data in MacOS RAM
51     enum {
52     ed_DeferredTask = 0, // Deferred Task struct
53     ed_Code = 20, // DT code is stored here
54     ed_Result = 30, // Result for DT
55     ed_DCE = 34, // DCE for DT (must come directly behind ed_Result)
56     ed_RHA = 38, // Read header area
57     ed_ReadPacket = 52, // ReadPacket/ReadRest routines
58     SIZEOF_etherdata = 76
59     };
60    
61     extern uint32 ether_data; // Mac address of driver data in MacOS RAM
62 cebix 1.4
63     // Copy packet data from WDS to linear buffer (must hold at least 1514 bytes),
64     // returns packet length
65     static inline int ether_wds_to_buffer(uint32 wds, uint8 *p)
66     {
67     int len = 0;
68     while (len < 1514) {
69     int w = ReadMacInt16(wds);
70     if (w == 0)
71     break;
72     Mac2Host_memcpy(p, ReadMacInt32(wds + 2), w);
73     len += w;
74     p += w;
75     wds += 6;
76     }
77     return len;
78     }
79 cebix 1.1
80     #endif