home *** CD-ROM | disk | FTP | other *** search
/ H4CK3R 4 / hacker04 / 04_HACK04.ISO / darwin / darwinx86.iso / usr / include / netat / appletalk.h < prev    next >
Encoding:
C/C++ Source or Header  |  2001-09-30  |  8.8 KB  |  296 lines

  1. /*
  2.  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
  3.  *
  4.  * @APPLE_LICENSE_HEADER_START@
  5.  * 
  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.
  11.  * 
  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
  18.  * under the License.
  19.  * 
  20.  * @APPLE_LICENSE_HEADER_END@
  21.  */
  22. /*
  23.  *
  24.  * ORIGINS: 82
  25.  *
  26.  * (C) COPYRIGHT Apple Computer, Inc. 1992-1996
  27.  * All Rights Reserved
  28.  *
  29.  */                                                                   
  30.  
  31. /* Miscellaneous definitions for AppleTalk used by all protocol 
  32.  * modules.
  33.  */
  34.  
  35. #ifndef _NETAT_APPLETALK_H_
  36. #define _NETAT_APPLETALK_H_
  37.  
  38. #include <sys/types.h>
  39. #include <sys/uio.h>
  40.  
  41. /* 
  42.    Non-aligned types are used in packet headers. 
  43. */
  44.  
  45. /* New fundemental types: non-aligned variations of u_short and u_long */
  46. typedef u_char ua_short[2];        /* Unaligned short */
  47. typedef u_char ua_long[4];        /* Unaligned long */
  48.  
  49. /* Two at_net typedefs; the first is aligned the other isn't */
  50. typedef u_short at_net_al;        /* Aligned AppleTalk network number */
  51. typedef ua_short at_net_unal;        /* Unaligned AppleTalk network number */
  52.  
  53. /* Miscellaneous types */
  54. typedef u_char    at_node;        /* AppleTalk node number */
  55. typedef u_char  at_socket;        /* AppleTalk socket number */
  56.  
  57. typedef at_net_unal at_net;    /* Default: Unaligned AppleTalk network number */
  58. struct atalk_addr {
  59.     u_char    atalk_unused;
  60.     at_net    atalk_net;
  61.     at_node    atalk_node;
  62. };
  63.  
  64. /* Macros to manipulate unaligned fields */
  65. #define    UAS_ASSIGN(x,s)    *(unsigned short *) &(x[0]) = (unsigned short) (s)
  66. #define    UAS_UAS(x,y)    *(unsigned short *) &(x[0]) = *(unsigned short *) &(y[0])
  67. #define    UAS_VALUE(x)    (*(unsigned short *) &(x[0]))
  68. #define    UAL_ASSIGN(x,l)    *(unsigned long *) &(x[0]) = (unsigned long) (l)
  69. #define    UAL_UAL(x,y)    *(unsigned long *) &(x[0]) = *(unsigned long *) &(y[0])
  70. #define    UAL_VALUE(x)    (*(unsigned long *) &(x[0]))
  71.  
  72. /* Macros to manipulate at_net variables */
  73. #define    NET_ASSIGN(x,s)    *(unsigned short *)&(x[0]) = (unsigned short)(s)
  74. #define    NET_NET(x, y)    *(unsigned short *)&(x[0]) = *(unsigned short *)&(y[0])
  75. #define    NET_VALUE(x)    (*(unsigned short *) &(x[0]))
  76. #define ATALK_ASSIGN(a, net, node, unused ) \
  77.   a.atalk_unused = unused; a.atalk_node = node; NET_ASSIGN(a.atalk_net, net)
  78.  
  79. #define NET_EQUAL(a, b)    (NET_VALUE(a) == NET_VALUE(b))
  80. #define NET_NOTEQ(a, b)    (NET_VALUE(a) != NET_VALUE(b))
  81. #define NET_EQUAL0(a)    (NET_VALUE(a) == 0)
  82. #define NET_NOTEQ0(a)    (NET_VALUE(a) != 0)
  83.  
  84.  
  85. /* 
  86.    AppleTalk Internet Address 
  87. */
  88.  
  89. typedef struct at_inet {
  90.     u_short    net;            /* Network Address */
  91.     u_char    node;            /* Node number */
  92.     u_char    socket;            /* Socket number */
  93. } at_inet_t;
  94.  
  95. /*
  96.    DDP Address for OT
  97. */
  98.  
  99. typedef struct ddp_addr {
  100.     at_inet_t    inet;
  101.     u_short        ddptype;
  102. } ddp_addr_t;
  103.  
  104. /*
  105.   AppleTalk address
  106. */
  107.  
  108. struct at_addr {
  109.     u_short     s_net;        /* 16-bit network address */
  110.     u_char      s_node;        /* 8-bit node # (1-0xfd) */
  111. };
  112.  
  113. /*
  114.   Appletalk sockaddr definition
  115. */
  116. struct sockaddr_at {
  117.     u_char      sat_len;        /* total length */
  118.     u_char      sat_family;     /* address family (AF_APPLETALK) */
  119.     u_char      sat_port;    /* 8-bit "socket number" */
  120.     struct at_addr     sat_addr;    /* 16-bit "net" and 8-bit "node */
  121.     char        sat_zero[8];    /* used for netrange in netatalk */
  122. };
  123.  
  124. #define ATADDR_ANYNET    (u_short)0x0000
  125. #define ATADDR_ANYNODE    (u_char)0x00
  126. #define ATADDR_ANYPORT    (u_char)0x00
  127.  
  128. #define ATADDR_BCASTNODE (u_char)0xff    /* There is no BCAST for NET */
  129.  
  130. /* make sure the net, node and socket numbers are in legal range :
  131.  *
  132.  * Net#        0        Local Net
  133.  *        1 - 0xfffe    Legal net nos
  134.  *        0xffff        Reserved by Apple for future use.
  135.  * Node#    0        Illegal
  136.  *        1 - 0x7f    Legal (user node id's)
  137.  *        0x80 - 0xfe    Legal (server node id's; 0xfe illegal in
  138.  *                Phase II nodes)
  139.  *        0xff        Broadcast
  140.  * Socket#    0        Illegal
  141.  *        1 - 0xfe    Legal
  142.  *        0xff        Illegal
  143.  */
  144. #define valid_at_addr(addr) \
  145.     ((!(addr) || (addr)->net == 0xffff || (addr)->node == 0 || \
  146.       (addr)->socket == 0 || (addr)->socket == 0xff)? 0: 1)
  147.  
  148. /*** * ETHERTYPE_ definitions are in netinet/if_ether.h *** */
  149. #define ETHERTYPE_AT    0x809B          /* AppleTalk protocol */
  150. #define ETHERTYPE_AARP  0x80F3          /* AppleTalk ARP */
  151.  
  152. /* 
  153.    DDP protocol types 
  154. */
  155.  
  156. #define DDP_RTMP          0x01
  157. #define DDP_NBP           0x02
  158. #define DDP_ATP           0x03
  159. #define DDP_ECHO          0x04
  160. #define DDP_RTMP_REQ      0x05
  161. #define DDP_ZIP           0x06
  162. #define DDP_ADSP          0x07
  163.  
  164. /* 
  165.    Protocols for the socket API 
  166. */
  167.  
  168. #define ATPROTO_NONE      0        /* no corresponding DDP type exists */
  169.  
  170. #define ATPROTO_ATP    DDP_ATP        /* must match DDP type */
  171. #define ATPROTO_ADSP    DDP_ADSP    /* must match DDP type */
  172.  
  173. #define ATPROTO_DDP    249        /* *** to be eliminated eventually *** */
  174. #define ATPROTO_LAP       250         /* *** to be eliminated eventually *** */
  175.  
  176. #define ATPROTO_AURP      251        /* no corresponding DDP type exists */
  177. #define ATPROTO_ASP    252        /* no corresponding DDP type exists */
  178. #define ATPROTO_AFP    253        /* no corresponding DDP type exists */
  179.  
  180. #define ATPROTO_RAW    255        /* no corresponding DDP type exists */
  181.  
  182. /*
  183.   Options for use with [gs]etsockopt at the DDP level.
  184.   First word of comment is data type; bool is stored in int.
  185. */
  186. #define DDP_CHKSUM_ON    1    /* int; default = FALSE;
  187.                    DDP checksums should be used */
  188. #define DDP_HDRINCL    2    /* int; default = FALSE;
  189.                    header is included with data */
  190. #define DDP_GETSOCKNAME    3    /* used to get ddp_addr_t */
  191. #define DDP_SLFSND_ON    4    /* int; default = FALSE;
  192.                    packets sent to the cable-multicast address
  193.                    on this socket will be looped back */
  194. #define DDP_STRIPHDR    5    /* int; default = FALSE;
  195.                    drop DDP header on receive (raw) */
  196.  
  197. /* 
  198.    AppleTalk protocol retry and timeout 
  199. */
  200.  
  201. typedef struct at_retry {
  202.     short    interval;        /* Retry interval in seconds */
  203.     short    retries;        /* Maximum number of retries */
  204.     u_char      backoff;                /* Retry backoff, must be 1 through 4 */
  205. } at_retry_t;
  206.  
  207. /* 
  208.    Basic NBP Definitions needed for AppleTalk framework
  209. */
  210.  
  211. #define MAX_ZONES 50
  212.  
  213. #define NBP_NVE_STR_SIZE    32    /* Maximum NBP tuple string size */
  214. typedef struct at_nvestr {
  215.     u_char        len;
  216.     u_char        str[NBP_NVE_STR_SIZE];
  217. } at_nvestr_t;
  218.  
  219. /* Entity Name */
  220. typedef struct at_entity {
  221.     at_nvestr_t    object;
  222.     at_nvestr_t    type;
  223.     at_nvestr_t    zone;
  224. } at_entity_t;
  225.  
  226. #define NBP_TUPLE_SIZE    ((3*NBP_NVE_STR_SIZE)+3) 
  227.             /* 3 for field lengths + 3*32 for three names */
  228. typedef struct at_nbptuple {
  229.     at_inet_t    enu_addr;
  230.     u_char        enu_enum;
  231.     at_entity_t     enu_entity;
  232. } at_nbptuple_t;
  233.  
  234. /* 
  235.    Basic ATP Definitions needed for LibcAT 
  236. */
  237.  
  238. #define ATP_TRESP_MAX       8    /* Maximum number of Tresp pkts */
  239.  
  240. /* Response buffer structure for atp_sendreq() and atp_sendrsp() */
  241. typedef    struct    at_resp {
  242.     u_char    bitmap;                /* Bitmap of responses */
  243.     u_char    filler[3];            /* Force 68K to RISC alignment */
  244.     struct    iovec resp[ATP_TRESP_MAX];    /* Buffer for response data */
  245.     long    userdata[ATP_TRESP_MAX];    /* Buffer for response user data */
  246. } at_resp_t;
  247.  
  248. /* 
  249.    Needed for ASP and ADSP 
  250. */
  251.  
  252. typedef struct {
  253.     int  maxlen; /* max buffer length */
  254.     int  len;    /* length of data */
  255.     char *buf;   /* pointer to buffer */
  256. } strbuf_t;
  257.  
  258. #define    IFID_HOME    1         /* home port in ifID_table */
  259.  
  260. #define    ATALK_VALUE(a)        ((*(u_long *) &(a))&0x00ffffff)
  261. #define    ATALK_EQUAL(a, b)    (ATALK_VALUE(a) == ATALK_VALUE(b))
  262.  
  263. #define VERSION_LENGTH        80    /* length of version string */
  264.  
  265. /* struture containing general information regarding the state of
  266.  * the Appletalk networking 
  267.  */
  268. typedef struct at_state {
  269.     unsigned int    flags;        /* various init flags */
  270. } at_state_t;
  271.  
  272. /*  at_state_t 'flags' defines */
  273. #define AT_ST_STARTED        0x0001
  274. #define AT_ST_MULTIHOME        0x0080    /* set if multihome mode */
  275. #define AT_ST_ROUTER        0x0100    /* set if we are a router */
  276. #define AT_ST_IF_CHANGED    0x0200    /* set when state of any I/F 
  277.                        changes (for SNMP) */
  278. #define AT_ST_RT_CHANGED    0x0400  /* route table changed (for SNMP)*/
  279. #define AT_ST_ZT_CHANGED     0x0800  /* zone table changed (for SNMP) */
  280. #define AT_ST_NBP_CHANGED    0x1000  /* if nbp table changed (for SNMP)*/
  281.  
  282. #ifdef KERNEL
  283. extern at_state_t at_state;        /* global state of AT network */
  284.  
  285. #define ROUTING_MODE    (at_state.flags & AT_ST_ROUTER)
  286. #define MULTIHOME_MODE    (at_state.flags & AT_ST_MULTIHOME)
  287. #define MULTIPORT_MODE (ROUTING_MODE || MULTIHOME_MODE)
  288. #endif /* KERNEL */
  289.  
  290. /* defines originally from h/at_elap.h */
  291. #define AT_ADDR            0
  292. #define ET_ADDR            1
  293. #define AT_ADDR_NO_LOOP        2    /* disables packets from looping back */
  294.  
  295. #endif /* _NETAT_APPLETALK_H_ */
  296.