Annotation of XNU/bsd/netat/appletalk.h, revision 1.1

1.1     ! root        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       /* DDP checksums should be used */
        !           187:   /* *** DDP_CHKSUM_ON not yet fully implemented *** */
        !           188: #define DDP_HDRINCL    2       /* int; header is included with data */
        !           189: #define DDP_GETSOCKNAME        3       /* used to get ddp_addr_t */
        !           190: #define DDP_SLFSNDOFF  4       /* packets sent to the cable-multicast address
        !           191:                                   on this socket should not be looped back */
        !           192:   /* *** DDP_SLFSNDOFF not yet fully implemented *** */
        !           193: #define DDP_STRIPHDR   5       /* drop DDP header on receive (raw) */
        !           194: 
        !           195: /* 
        !           196:    AppleTalk protocol retry and timeout 
        !           197: */
        !           198: 
        !           199: typedef struct at_retry {
        !           200:     short      interval;               /* Retry interval in seconds */
        !           201:     short      retries;                /* Maximum number of retries */
        !           202:     u_char      backoff;                /* Retry backoff, must be 1 through 4 */
        !           203: } at_retry_t;
        !           204: 
        !           205: /* 
        !           206:    Basic NBP Definitions needed for LibcAT 
        !           207: */
        !           208: 
        !           209: #define NBP_NVE_STR_SIZE       32      /* Maximum NBP tuple string size */
        !           210: typedef struct at_nvestr {
        !           211:        u_char          len;
        !           212:        u_char          str[NBP_NVE_STR_SIZE];
        !           213: } at_nvestr_t;
        !           214: 
        !           215: /* Entity Name */
        !           216: typedef struct at_entity {
        !           217:        at_nvestr_t     object;
        !           218:        at_nvestr_t     type;
        !           219:        at_nvestr_t     zone;
        !           220: } at_entity_t;
        !           221: 
        !           222: #define NBP_TUPLE_SIZE ((3*NBP_NVE_STR_SIZE)+3) 
        !           223:                        /* 3 for field lengths + 3*32 for three names */
        !           224: typedef struct at_nbptuple {
        !           225:        at_inet_t       enu_addr;
        !           226:        u_char          enu_enum;
        !           227:        at_entity_t     enu_entity;
        !           228: } at_nbptuple_t;
        !           229: 
        !           230: /* 
        !           231:    Basic ATP Definitions needed for LibcAT 
        !           232: */
        !           233: 
        !           234: #define ATP_TRESP_MAX       8  /* Maximum number of Tresp pkts */
        !           235: 
        !           236: /* Response buffer structure for atp_sendreq() and atp_sendrsp() */
        !           237: typedef        struct  at_resp {
        !           238:        u_char  bitmap;                         /* Bitmap of responses */
        !           239:        u_char  filler[3];                      /* Force 68K to RISC alignment */
        !           240:        struct  iovec resp[ATP_TRESP_MAX];      /* Buffer for response data */
        !           241:        long    userdata[ATP_TRESP_MAX];        /* Buffer for response user data */
        !           242: } at_resp_t;
        !           243: 
        !           244: /* 
        !           245:    Needed for ASP and ADSP 
        !           246: */
        !           247: 
        !           248: typedef struct {
        !           249:        int  maxlen; /* max buffer length */
        !           250:        int  len;    /* length of data */
        !           251:        char *buf;   /* pointer to buffer */
        !           252: } strbuf_t;
        !           253: 
        !           254: #define        IFID_HOME       0               /* home port in ifID_table */
        !           255: 
        !           256: #define        ATALK_VALUE(a)          ((*(u_long *) &(a))&0x00ffffff)
        !           257: #define        ATALK_EQUAL(a, b)       (ATALK_VALUE(a) == ATALK_VALUE(b))
        !           258: 
        !           259: #define VERSION_LENGTH         80      /* length of version string */
        !           260: 
        !           261: /* struture containing general information regarding the state of
        !           262:  * the Appletalk networking 
        !           263:  */
        !           264: typedef struct at_state {
        !           265:        unsigned int    flags;          /* various init flags */
        !           266: } at_state_t;
        !           267: 
        !           268: /*  at_state_t 'flags' defines */
        !           269: #define AT_ST_STARTED          0x0001
        !           270: #define AT_ST_MULTIHOME                0x0080  /* set if multihome mode */
        !           271: #define AT_ST_ROUTER           0x0100  /* set if we are a router */
        !           272: #define AT_ST_IF_CHANGED       0x0200  /* set when state of any I/F 
        !           273:                                           changes (for SNMP) */
        !           274: #define AT_ST_RT_CHANGED       0x0400  /* route table changed (for SNMP)*/
        !           275: #define AT_ST_ZT_CHANGED       0x0800  /* zone table changed (for SNMP) */
        !           276: #define AT_ST_NBP_CHANGED      0x1000  /* if nbp table changed (for SNMP)*/
        !           277: 
        !           278: #ifdef KERNEL
        !           279: extern at_state_t at_state;            /* global state of AT network */
        !           280: 
        !           281: #define ROUTING_MODE   (at_state.flags & AT_ST_ROUTER)
        !           282: #define MULTIHOME_MODE (at_state.flags & AT_ST_MULTIHOME)
        !           283: #define MULTIPORT_MODE (ROUTING_MODE || MULTIHOME_MODE)
        !           284: #endif /* KERNEL */
        !           285: 
        !           286: /* defines originally from h/at_elap.h */
        !           287: #define AT_ADDR                        0
        !           288: #define ET_ADDR                        1
        !           289: #define AT_ADDR_NO_LOOP                2       /* disables packets from looping back */
        !           290: 
        !           291: #endif /* _NETAT_APPLETALK_H_ */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.