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

SRC/pcsed.h

Go to the documentation of this file.
00001 00006 #ifndef _w32_PCSED_H 00007 #define _w32_PCSED_H 00008 00012 #define HW_TYPE_ETHER 1 /* Ether >= 10MB */ 00013 #define HW_TYPE_ETHER_3MB 2 /* Ether = 3MB */ 00014 #define HW_TYPE_AX25 3 /* Amateur packet-radio */ 00015 #define HW_TYPE_TOKEN 6 /* IEEE 802 Networks */ 00016 #define HW_TYPE_ARCNET 7 /* 2.5 MBit ARCNET */ 00017 #define HW_TYPE_APPLETALK 8 /* Not at all supported */ 00018 #define HW_TYPE_FDDI 10 /* Not really supported */ 00019 00020 #include <sys/pack_on.h> /* align structs on byte boundaries */ 00021 00026 typedef struct eth_Header { 00027 eth_address destination; 00028 eth_address source; 00029 WORD type; 00030 } eth_Header; 00031 00036 typedef struct eth_Packet { 00037 eth_Header head; 00038 BYTE data [ETH_MAX_DATA]; 00039 } eth_Packet; 00040 00041 00046 typedef struct vlan_Header { 00047 eth_address destination; 00048 eth_address source; 00049 WORD proto; /* 0x8100 */ 00050 WORD tci; 00051 WORD encap_proto; 00052 } vlan_Header; 00053 00058 typedef struct vlan_Packet { 00059 vlan_Header head; /* 18 */ 00060 BYTE data [VLAN_MAX_DATA]; /* 1496 */ 00061 } vlan_Packet; 00062 00063 00068 typedef struct tok_Header { 00069 /* MAC header. 00070 */ 00071 BYTE accessCtrl; 00072 BYTE frameCtrl; 00073 mac_address destination; 00074 mac_address source; 00075 00076 /* 2-18 bytes of Routing Information (RIF) may be present here. 00077 * We discard it anyway (see fix_tok_head()). 00078 */ 00079 00080 /* LLC header. 00081 */ 00082 BYTE DSAP; 00083 BYTE SSAP; 00084 BYTE ctrl; 00085 00086 /* SNAP extension. 00087 */ 00088 BYTE org[3]; 00089 WORD type; 00090 } tok_Header; 00091 00096 typedef struct tok_Packet { 00097 tok_Header head; 00098 BYTE data [TOK_MAX_DATA]; 00099 } tok_Packet; 00100 00105 typedef struct llc_Header { 00106 BYTE DSAP; 00107 BYTE SSAP; 00108 union { 00109 BYTE u_ctl; 00110 WORD is_ctl; 00111 struct { 00112 BYTE snap_ui; 00113 BYTE snap_pi[5]; 00114 } snap; 00115 struct { 00116 BYTE snap_ui; 00117 BYTE snap_orgcode[3]; 00118 BYTE snap_ethertype[2]; 00119 } snap_ether; 00120 } ctl; 00121 } llc_Header; 00122 00126 #define TR_AC 0x10 /* Access Control; Frame bit (not token) */ 00127 #define TR_FC 0x40 /* Frame Control; LLC header follows */ 00128 #define TR_DSAP 0xAA /* DSAP field; SNAP follows LLC */ 00129 #define TR_SSAP 0xAA /* SSAP field; SNAP follows LLC */ 00130 #define TR_CTRL 0x03 /* Unnumbered Information */ 00131 #define TR_ORG 0x00 /* Organisation Code or Protocol Id */ 00132 00133 00138 typedef struct fddi_Header { 00139 BYTE frameCtrl; 00140 eth_address destination; 00141 eth_address source; 00142 BYTE DSAP; 00143 BYTE SSAP; 00144 BYTE ctrl; 00145 BYTE org[3]; 00146 WORD type; 00147 } fddi_Header; 00148 00153 typedef struct fddi_Packet { 00154 fddi_Header head; 00155 BYTE data [FDDI_MAX_DATA]; 00156 } fddi_Packet; 00157 00158 #define FDDI_FC 0x40 /* See above */ 00159 #define FDDI_DSAP 0xAA 00160 #define FDDI_SSAP 0xAA 00161 #define FDDI_CTRL 0x03 00162 #define FDDI_ORG 0x00 00163 00164 00169 typedef struct arcnet_Header { 00170 BYTE source; 00171 BYTE destination; 00172 BYTE type; 00173 BYTE flags; 00174 WORD sequence; 00175 00176 /* Only present in exception packets (flags == 0xFF) 00177 */ 00178 BYTE type2; /* same as 'type' */ 00179 BYTE flags2; 00180 WORD sequence2; 00181 } arcnet_Header; 00182 00183 #define ARC_HDRLEN 6 /* normal header length */ 00184 #define ARC_TYPE_OFS 2 00185 00190 typedef struct arcnet_Packet { 00191 arcnet_Header head; 00192 BYTE data [ARCNET_MAX_DATA]; 00193 } arcnet_Packet; 00194 00195 00200 typedef union link_Packet { 00201 struct eth_Packet eth; /* _pktdevclass = PDCLASS_ETHER */ 00202 struct tok_Packet tok; /* _pktdevclass = PDCLASS_TOKEN (_RIF) */ 00203 struct fddi_Packet fddi; /* _pktdevclass = PDCLASS_FDDI */ 00204 struct arcnet_Packet arc; /* _pktdevclass = PDCLASS_ARCNET */ 00205 struct ip_Packet ip; /* _pktdevclass = PDCLASS_PPP/PDCLASS_SLIP */ 00206 struct vlan_Packet vlan; /* not supported */ 00207 } link_Packet; 00208 00209 #include <sys/pack_off.h> /* restore default packing */ 00210 00211 struct _eth_last_info { 00212 struct { 00213 unsigned size; /* frame-size of last Rx */ 00214 struct ulong_long tstamp; /* timestamp of last Tx (not Win32) */ 00215 } tx; 00216 struct { 00217 unsigned size; /* frame-size of last Rx */ 00218 struct ulong_long tstamp; /* timestamp of last Rx 1st upcall (not Win32) */ 00219 } rx; 00220 }; 00221 00222 extern struct _eth_last_info _eth_last; 00223 00224 extern BOOL _ip_recursion, _eth_is_init; 00225 extern BOOL _eth_ndis3pkt, _eth_SwsVpkt, _eth_airpcap; 00226 extern BYTE _eth_mac_len; 00227 extern const char *_eth_not_init; 00228 00229 W32_DATA mac_address _eth_addr; /* Current MAC-address (not AX-25) */ 00230 W32_DATA mac_address _eth_real_addr; /* MAC-addr before _eth_set_addr() */ 00231 W32_DATA mac_address _eth_loop_addr; /* CF:00:00:00:00:00 */ 00232 W32_DATA mac_address _eth_brdcast; /* FF:FF:FF:FF:FF:FF */ 00233 00234 W32_DATA void *(*_eth_recv_hook) (WORD *type); 00235 W32_DATA int (*_eth_recv_peek) (void *mac_buf); 00236 W32_DATA int (*_eth_xmit_hook) (const void *mac_buf, unsigned len); 00237 00238 W32_FUNC int _eth_init (void); 00239 W32_FUNC void _eth_release (void); 00240 W32_FUNC int _eth_send (WORD len, const void *sock, const char *file, unsigned line); 00241 W32_FUNC int _eth_set_addr (const void *addr); 00242 W32_FUNC void *_eth_formatpacket (const void *mac_dest, WORD mac_type); 00243 W32_FUNC void _eth_free (const void *pkt); 00244 W32_FUNC void *_eth_arrived (WORD *type, BOOL *brdcast); 00245 W32_FUNC BYTE _eth_get_hwtype (BYTE *hwtype, BYTE *hwlen); 00246 00247 #if defined(USE_MULTICAST) 00248 #include "pcmulti.h" 00249 00250 W32_FUNC BOOL _eth_join_mcast_group (const struct MultiCast *mc); 00251 W32_FUNC BOOL _eth_leave_mcast_group (const struct MultiCast *mc); 00252 #endif 00253 00254 /* 00255 * Return pointer to hardware source address of 00256 * an IP packet. For Ethernet: 00257 * 00258 * struct eth_Packet { 00259 * BYTE dest [6]; <- -14 00260 * BYTE src [6]; <- -8 00261 * WORD type; 00262 * BYTE data [1500]; <- ip 00263 * }; 00264 * 00265 * For Token-Ring: 00266 * struct tok_Packet { 00267 * BYTE AC, FC; <- -22 00268 * BYTE dest [6]; 00269 * BYTE src [6]; <- -14 00270 * BYTE DSAP, SSAP, ctrl; 00271 * BYTE org [3]; 00272 * WORD type; 00273 * BYTE data [1500]; <- ip 00274 * 00275 * These macros and functions should never be called for serial protocols 00276 * except that it doesn't hurt to use MAC_SRC() for all driver classes. 00277 */ 00278 00279 #if defined(USE_DEBUG) && 0 /* slower, but safer method */ 00280 extern void *_eth_mac_hdr (const in_Header *ip) ATTR_NORETURN(); 00281 extern void *_eth_mac_dst (const in_Header *ip) ATTR_NORETURN(); 00282 extern void *_eth_mac_src (const in_Header *ip) ATTR_NORETURN(); 00283 extern WORD _eth_mac_typ (const in_Header *ip) ATTR_NORETURN(); 00284 00285 #define MAC_HDR(ip) _eth_mac_hdr(ip) 00286 #define MAC_DST(ip) _eth_mac_dst(ip) 00287 #define MAC_SRC(ip) _eth_mac_src(ip) 00288 #define MAC_TYP(ip) _eth_mac_typ(ip) 00289 #else 00290 #define MAC_HDR(ip) (void*) ((BYTE*)(ip) - _pkt_ip_ofs) 00291 00292 #define MAC_DST(ip) (void*) ((BYTE*)(ip) - \ 00293 (_pktdevclass == PDCLASS_TOKEN ? _pkt_ip_ofs-2 : \ 00294 _pktdevclass == PDCLASS_ARCNET ? _pkt_ip_ofs-1 : \ 00295 _pktdevclass == PDCLASS_FDDI ? _pkt_ip_ofs-5 : \ 00296 _pkt_ip_ofs)) 00297 00298 #define MAC_SRC(ip) (void*) ((BYTE*)(ip) - \ 00299 (_pktdevclass == PDCLASS_TOKEN ? _pkt_ip_ofs-8 : \ 00300 _pktdevclass == PDCLASS_ARCNET ? _pkt_ip_ofs : \ 00301 _pktdevclass == PDCLASS_FDDI ? _pkt_ip_ofs-7 : \ 00302 _pkt_ip_ofs-6)) 00303 00304 #define MAC_TYP(ip) (*(WORD*) ((BYTE*)(ip) - \ 00305 (_pktdevclass == PDCLASS_ARCNET ? _pkt_ip_ofs-2 : 2))) 00306 #endif 00307 00308 /* 00309 * Macros to set or clear peer's source MAC-address stored in 00310 * the _udp_Socket / _tcp_Socket. 00311 * Only used on passive (listening) udp/tcp sockets. 00312 * We don't use arp_resolve() because of reentrancy problems. 00313 * But if inbound packets come from a different gateway than 00314 * outbound packets, then we're toast.. 00315 */ 00316 #define SET_PEER_MAC_ADDR(tcb,ip) do { \ 00317 if (!_pktserial) \ 00318 memcpy (&(tcb)->his_ethaddr[0], MAC_SRC(ip), 6); \ 00319 } while (0) 00320 00321 #define CLR_PEER_MAC_ADDR(tcb) do { \ 00322 if (!_pktserial) \ 00323 memset (&(tcb)->his_ethaddr[0], 0, 6); \ 00324 } while (0) 00325 00326 #endif

Generated on Wed Aug 4 08:55:52 2010 for Watt-32 tcp/ip by doxygen 1.3.8