]>
git.saurik.com Git - apple/xnu.git/blob - bsd/netat/appletalk.h
2 * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
4 * @APPLE_LICENSE_HEADER_START@
6 * The contents of this file constitute Original Code as defined in and
7 * are subject to the Apple Public Source License Version 1.1 (the
8 * "License"). You may not use this file except in compliance with the
9 * License. Please obtain a copy of the License at
10 * http://www.apple.com/publicsource and read it before using this file.
12 * This Original Code and all software distributed under the License are
13 * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
14 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
17 * License for the specific language governing rights and limitations
20 * @APPLE_LICENSE_HEADER_END@
26 * (C) COPYRIGHT Apple Computer, Inc. 1992-1996
31 /* Miscellaneous definitions for AppleTalk used by all protocol
35 #ifndef _NETAT_APPLETALK_H_
36 #define _NETAT_APPLETALK_H_
37 #include <sys/appleapiopts.h>
39 #include <sys/types.h>
43 Non-aligned types are used in packet headers.
46 /* New fundemental types: non-aligned variations of u_short and u_long */
47 typedef u_char ua_short
[2]; /* Unaligned short */
48 typedef u_char ua_long
[4]; /* Unaligned long */
50 /* Two at_net typedefs; the first is aligned the other isn't */
51 typedef u_short at_net_al
; /* Aligned AppleTalk network number */
52 typedef ua_short at_net_unal
; /* Unaligned AppleTalk network number */
54 /* Miscellaneous types */
55 typedef u_char at_node
; /* AppleTalk node number */
56 typedef u_char at_socket
; /* AppleTalk socket number */
58 typedef at_net_unal at_net
; /* Default: Unaligned AppleTalk network number */
65 /* Macros to manipulate unaligned fields */
66 #define UAS_ASSIGN(x,s) *(unsigned short *) &(x[0]) = (unsigned short) (s)
67 #define UAS_UAS(x,y) *(unsigned short *) &(x[0]) = *(unsigned short *) &(y[0])
68 #define UAS_VALUE(x) (*(unsigned short *) &(x[0]))
69 #define UAL_ASSIGN(x,l) *(unsigned long *) &(x[0]) = (unsigned long) (l)
70 #define UAL_UAL(x,y) *(unsigned long *) &(x[0]) = *(unsigned long *) &(y[0])
71 #define UAL_VALUE(x) (*(unsigned long *) &(x[0]))
73 /* Macros to manipulate at_net variables */
74 #define NET_ASSIGN(x,s) *(unsigned short *)&(x[0]) = (unsigned short)(s)
75 #define NET_NET(x, y) *(unsigned short *)&(x[0]) = *(unsigned short *)&(y[0])
76 #define NET_VALUE(x) (*(unsigned short *) &(x[0]))
77 #define ATALK_ASSIGN(a, net, node, unused ) \
78 a.atalk_unused = unused; a.atalk_node = node; NET_ASSIGN(a.atalk_net, net)
80 #define NET_EQUAL(a, b) (NET_VALUE(a) == NET_VALUE(b))
81 #define NET_NOTEQ(a, b) (NET_VALUE(a) != NET_VALUE(b))
82 #define NET_EQUAL0(a) (NET_VALUE(a) == 0)
83 #define NET_NOTEQ0(a) (NET_VALUE(a) != 0)
87 AppleTalk Internet Address
90 typedef struct at_inet
{
91 u_short net
; /* Network Address */
92 u_char node
; /* Node number */
93 u_char socket
; /* Socket number */
100 typedef struct ddp_addr
{
110 u_short s_net
; /* 16-bit network address */
111 u_char s_node
; /* 8-bit node # (1-0xfd) */
115 Appletalk sockaddr definition
118 u_char sat_len
; /* total length */
119 u_char sat_family
; /* address family (AF_APPLETALK) */
120 u_char sat_port
; /* 8-bit "socket number" */
121 struct at_addr sat_addr
; /* 16-bit "net" and 8-bit "node */
122 char sat_zero
[8]; /* used for netrange in netatalk */
125 #define ATADDR_ANYNET (u_short)0x0000
126 #define ATADDR_ANYNODE (u_char)0x00
127 #define ATADDR_ANYPORT (u_char)0x00
129 #define ATADDR_BCASTNODE (u_char)0xff /* There is no BCAST for NET */
131 /* make sure the net, node and socket numbers are in legal range :
134 * 1 - 0xfffe Legal net nos
135 * 0xffff Reserved by Apple for future use.
137 * 1 - 0x7f Legal (user node id's)
138 * 0x80 - 0xfe Legal (server node id's; 0xfe illegal in
145 #define valid_at_addr(addr) \
146 ((!(addr) || (addr)->net == 0xffff || (addr)->node == 0 || \
147 (addr)->socket == 0 || (addr)->socket == 0xff)? 0: 1)
149 /*** * ETHERTYPE_ definitions are in netinet/if_ether.h *** */
150 #define ETHERTYPE_AT 0x809B /* AppleTalk protocol */
151 #define ETHERTYPE_AARP 0x80F3 /* AppleTalk ARP */
157 #define DDP_RTMP 0x01
160 #define DDP_ECHO 0x04
161 #define DDP_RTMP_REQ 0x05
163 #define DDP_ADSP 0x07
166 Protocols for the socket API
169 #define ATPROTO_NONE 0 /* no corresponding DDP type exists */
171 #define ATPROTO_ATP DDP_ATP /* must match DDP type */
172 #define ATPROTO_ADSP DDP_ADSP /* must match DDP type */
174 #define ATPROTO_DDP 249 /* *** to be eliminated eventually *** */
175 #define ATPROTO_LAP 250 /* *** to be eliminated eventually *** */
177 #define ATPROTO_AURP 251 /* no corresponding DDP type exists */
178 #define ATPROTO_ASP 252 /* no corresponding DDP type exists */
179 #define ATPROTO_AFP 253 /* no corresponding DDP type exists */
181 #define ATPROTO_RAW 255 /* no corresponding DDP type exists */
184 Options for use with [gs]etsockopt at the DDP level.
185 First word of comment is data type; bool is stored in int.
187 #define DDP_CHKSUM_ON 1 /* int; default = FALSE;
188 DDP checksums should be used */
189 #define DDP_HDRINCL 2 /* int; default = FALSE;
190 header is included with data */
191 #define DDP_GETSOCKNAME 3 /* used to get ddp_addr_t */
192 #define DDP_SLFSND_ON 4 /* int; default = FALSE;
193 packets sent to the cable-multicast address
194 on this socket will be looped back */
195 #define DDP_STRIPHDR 5 /* int; default = FALSE;
196 drop DDP header on receive (raw) */
199 AppleTalk protocol retry and timeout
202 typedef struct at_retry
{
203 short interval
; /* Retry interval in seconds */
204 short retries
; /* Maximum number of retries */
205 u_char backoff
; /* Retry backoff, must be 1 through 4 */
209 Basic NBP Definitions needed for AppleTalk framework
214 #define NBP_NVE_STR_SIZE 32 /* Maximum NBP tuple string size */
215 typedef struct at_nvestr
{
217 u_char str
[NBP_NVE_STR_SIZE
];
221 typedef struct at_entity
{
227 #define NBP_TUPLE_SIZE ((3*NBP_NVE_STR_SIZE)+3)
228 /* 3 for field lengths + 3*32 for three names */
229 typedef struct at_nbptuple
{
232 at_entity_t enu_entity
;
236 Basic ATP Definitions needed for LibcAT
239 #define ATP_TRESP_MAX 8 /* Maximum number of Tresp pkts */
241 /* Response buffer structure for atp_sendreq() and atp_sendrsp() */
242 typedef struct at_resp
{
243 u_char bitmap
; /* Bitmap of responses */
244 u_char filler
[3]; /* Force 68K to RISC alignment */
245 struct iovec resp
[ATP_TRESP_MAX
]; /* Buffer for response data */
246 long userdata
[ATP_TRESP_MAX
]; /* Buffer for response user data */
250 Needed for ASP and ADSP
254 int maxlen
; /* max buffer length */
255 int len
; /* length of data */
256 char *buf
; /* pointer to buffer */
259 #define IFID_HOME 1 /* home port in ifID_table */
261 #define ATALK_VALUE(a) ((*(u_long *) &(a))&0x00ffffff)
262 #define ATALK_EQUAL(a, b) (ATALK_VALUE(a) == ATALK_VALUE(b))
264 #define VERSION_LENGTH 80 /* length of version string */
266 /* struture containing general information regarding the state of
267 * the Appletalk networking
269 typedef struct at_state
{
270 unsigned int flags
; /* various init flags */
273 /* at_state_t 'flags' defines */
274 #define AT_ST_STARTED 0x0001 /* set if protocol is fully enabled */
275 #define AT_ST_STARTING 0x0002 /* set if interfaces are configured */
276 #define AT_ST_MULTIHOME 0x0080 /* set if multihome mode */
277 #define AT_ST_ROUTER 0x0100 /* set if we are a router */
278 #define AT_ST_IF_CHANGED 0x0200 /* set when state of any I/F
279 changes (for SNMP) */
280 #define AT_ST_RT_CHANGED 0x0400 /* route table changed (for SNMP)*/
281 #define AT_ST_ZT_CHANGED 0x0800 /* zone table changed (for SNMP) */
282 #define AT_ST_NBP_CHANGED 0x1000 /* if nbp table changed (for SNMP)*/
285 #ifdef __APPLE_API_PRIVATE
286 extern at_state_t at_state
; /* global state of AT network */
288 #define ROUTING_MODE (at_state.flags & AT_ST_ROUTER)
289 #define MULTIHOME_MODE (at_state.flags & AT_ST_MULTIHOME)
290 #define MULTIPORT_MODE (ROUTING_MODE || MULTIHOME_MODE)
291 #endif /* __APPLE_API_PRIVATE */
294 /* defines originally from h/at_elap.h */
297 #define AT_ADDR_NO_LOOP 2 /* disables packets from looping back */
299 #endif /* _NETAT_APPLETALK_H_ */