Home | History | Annotate | Download | only in snoop
      1  0  stevel /*
      2  0  stevel  * CDDL HEADER START
      3  0  stevel  *
      4  0  stevel  * The contents of this file are subject to the terms of the
      5  0  stevel  * Common Development and Distribution License, Version 1.0 only
      6  0  stevel  * (the "License").  You may not use this file except in compliance
      7  0  stevel  * with the License.
      8  0  stevel  *
      9  0  stevel  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
     10  0  stevel  * or http://www.opensolaris.org/os/licensing.
     11  0  stevel  * See the License for the specific language governing permissions
     12  0  stevel  * and limitations under the License.
     13  0  stevel  *
     14  0  stevel  * When distributing Covered Code, include this CDDL HEADER in each
     15  0  stevel  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     16  0  stevel  * If applicable, add the following below this CDDL HEADER, with the
     17  0  stevel  * fields enclosed by brackets "[]" replaced with your own identifying
     18  0  stevel  * information: Portions Copyright [yyyy] [name of copyright owner]
     19  0  stevel  *
     20  0  stevel  * CDDL HEADER END
     21  0  stevel  */
     22  0  stevel /*
     23  0  stevel  * Copyright (c) 2001 by Sun Microsystems, Inc.
     24  0  stevel  * All rights reserved.
     25  0  stevel  *
     26  0  stevel  */
     27  0  stevel 
     28  0  stevel #ifndef _AT_H
     29  0  stevel #define	_AT_H
     30  0  stevel 
     31  0  stevel #pragma ident	"%Z%%M%	%I%	%E% SMI"
     32  0  stevel 
     33  0  stevel #ifdef __cplusplus
     34  0  stevel extern "C" {
     35  0  stevel #endif
     36  0  stevel 
     37  0  stevel /*
     38  0  stevel  * There is a lot of alignment problems in AppleTalk packets.
     39  0  stevel  * This is the reason some of the headers use uint8_t arrays instead of the
     40  0  stevel  * natural datatype.
     41  0  stevel  */
     42  0  stevel 
     43  0  stevel /* AARP */
     44  0  stevel 
     45  0  stevel #define	AARP_REQ		1
     46  0  stevel #define	AARP_RESP		2
     47  0  stevel #define	AARP_PROBE		3
     48  0  stevel 
     49  0  stevel 
     50  0  stevel /* DDP */
     51  0  stevel 
     52  0  stevel struct ddp_hdr {
     53  0  stevel 	uint8_t		ddp_hop_len;
     54  0  stevel 	uint8_t		ddp_len_lo;
     55  0  stevel 	uint16_t	ddp_cksum;
     56  0  stevel 	uint16_t	ddp_dest_net;
     57  0  stevel 	uint16_t	ddp_src_net;
     58  0  stevel 	uint8_t		ddp_dest_id;
     59  0  stevel 	uint8_t		ddp_src_id;
     60  0  stevel 	uint8_t		ddp_dest_sock;
     61  0  stevel 	uint8_t		ddp_src_sock;
     62  0  stevel 	uint8_t		ddp_type;
     63  0  stevel };
     64  0  stevel 
     65  0  stevel #define	ddp_pad(x)	((x)->ddp_hop_len & 0xc0)
     66  0  stevel #define	ddp_hop(x)	(((x)->ddp_hop_len >> 2) & 0xf)
     67  0  stevel #define	ddp_len(x)	((((x)->ddp_hop_len & 0x3) << 8) + (x)->ddp_len_lo)
     68  0  stevel 
     69  0  stevel #define	DDPHDR_SIZE 13
     70  0  stevel 
     71  0  stevel #define	DDP_TYPE_RTMPRQ		5
     72  0  stevel #define	DDP_TYPE_RTMPRESP	1
     73  0  stevel #define	DDP_TYPE_NBP		2
     74  0  stevel #define	DDP_TYPE_ATP		3
     75  0  stevel #define	DDP_TYPE_AEP		4
     76  0  stevel #define	DDP_TYPE_ZIP		6
     77  0  stevel #define	DDP_TYPE_ADSP		7
     78  0  stevel 
     79  0  stevel 
     80  0  stevel /* AECHO */
     81  0  stevel 
     82  0  stevel #define	AEP_REQ			1
     83  0  stevel #define	AEP_REPLY		2
     84  0  stevel 
     85  0  stevel /* NBP */
     86  0  stevel 
     87  0  stevel struct nbp_hdr {
     88  0  stevel 	uint8_t		ddphdr[DDPHDR_SIZE];
     89  0  stevel 	uint8_t		nbp_fun_cnt;
     90  0  stevel 	uint8_t		nbp_id;
     91  0  stevel };
     92  0  stevel 
     93  0  stevel #define	NBP_BRRQ		1
     94  0  stevel #define	NBP_LKUP		2
     95  0  stevel #define	NBP_LKUP_REPLY		3
     96  0  stevel #define	NBP_FWDREQ		4
     97  0  stevel 
     98  0  stevel 
     99  0  stevel /* ZIP */
    100  0  stevel 
    101  0  stevel struct zip_hdr {
    102  0  stevel 	uint8_t		ddphdr[DDPHDR_SIZE];
    103  0  stevel 	uint8_t		zip_func;
    104  0  stevel 	uint8_t		zip_netcnt;
    105  0  stevel };
    106  0  stevel 
    107  0  stevel #define	ZIP_QUERY		1
    108  0  stevel #define	ZIP_REPLY		2
    109  0  stevel #define	ZIP_GET_NET_INFO	5
    110  0  stevel #define	ZIP_GET_NET_INFO_REPLY	6
    111  0  stevel #define	ZIP_NOTIFY		7
    112  0  stevel #define	ZIP_EXT_REPLY		8
    113  0  stevel 
    114  0  stevel #define	ZIP_ATP_GETMYZONE	7
    115  0  stevel #define	ZIP_ATP_GETZONELIST	8
    116  0  stevel #define	ZIP_ATP_GETLOCALZONES	9
    117  0  stevel 
    118  0  stevel #define	ZIP_FLG_ONEZ		0x20
    119  0  stevel #define	ZIP_FLG_USEBRC		0x40
    120  0  stevel #define	ZIP_FLG_ZINV		0x80
    121  0  stevel 
    122  0  stevel 
    123  0  stevel /* ATP */
    124  0  stevel 
    125  0  stevel struct atp_hdr {
    126  0  stevel 	uint8_t		ddphdr[DDPHDR_SIZE];
    127  0  stevel 	uint8_t		atp_ctrl;
    128  0  stevel 	uint8_t		atp_seq;
    129  0  stevel 	uint8_t		atp_tid[2];
    130  0  stevel 	uint8_t		atp_user[4];
    131  0  stevel };
    132  0  stevel 
    133  0  stevel #define	ATPHDR_SIZE	8
    134  0  stevel 
    135  0  stevel #define	atp_fun(x)	(((x) >> 6) & 0x3)
    136  0  stevel #define	atp_tmo(x)	((x) & 0x7)
    137  0  stevel 
    138  0  stevel #define	ATP_TREQ		1
    139  0  stevel #define	ATP_TRESP		2
    140  0  stevel #define	ATP_TREL		3
    141  0  stevel #define	ATP_FLG_STS		0x08
    142  0  stevel #define	ATP_FLG_EOM		0x10
    143  0  stevel #define	ATP_FLG_XO		0x20
    144  0  stevel 
    145  0  stevel 
    146  0  stevel #define	NODE_ID_BROADCAST	0xff
    147  0  stevel 
    148  0  stevel struct ddp_adsphdr {
    149  0  stevel 	uint8_t	ddphdr[DDPHDR_SIZE];
    150  0  stevel 	uint8_t	ad_connid[2];		/* short */
    151  0  stevel 	uint8_t	ad_fbseq[4];		/* long */
    152  0  stevel 	uint8_t	ad_nrseq[4];		/* long */
    153  0  stevel 	uint8_t	ad_rcvwin[2];		/* short */
    154  0  stevel 	uint8_t	ad_desc;
    155  0  stevel };
    156  0  stevel 
    157  0  stevel #define	AD_CTRL		0x80
    158  0  stevel #define	AD_ACKREQ	0x40
    159  0  stevel #define	AD_EOM		0x20
    160  0  stevel #define	AD_ATT		0x10
    161  0  stevel #define	AD_CTRL_MASK	0x0f
    162  0  stevel 
    163  0  stevel #define	AD_CREQ		0x81		/* Open Conn Request */
    164  0  stevel #define	AD_CACK		0x82		/* Open Conn Ack */
    165  0  stevel #define	AD_CREQ_ACK	0x83		/* Open Conn Req+Ack */
    166  0  stevel #define	AD_CDENY	0x84		/* Open Conn Denial */
    167  0  stevel 
    168  0  stevel struct ddp_adsp_att {
    169  0  stevel 	struct ddp_adsphdr	ad;
    170  0  stevel 	uint8_t		ad_att_code[2];	/* short */
    171  0  stevel };
    172  0  stevel 
    173  0  stevel struct ddp_adsp_open {
    174  0  stevel 	struct ddp_adsphdr	ad;
    175  0  stevel 	uint8_t		ad_version[2];	/* short */
    176  0  stevel 	uint8_t		ad_dconnid[2];	/* short */
    177  0  stevel 	uint8_t		ad_attseq[4];	/* long */
    178  0  stevel };
    179  0  stevel 
    180  0  stevel #define	RTMP_REQ	1
    181  0  stevel #define	RTMP_RDR_SH	2	/* Route Data Request, split horizon */
    182  0  stevel #define	RTMP_RDR_NSH	3	/* Route Data Request, no split horizon */
    183  0  stevel 
    184  0  stevel #define	RTMP_DIST_MASK	0x1f
    185  0  stevel #define	RTMP_EXTEND	0x80
    186  0  stevel #define	RTMP_FILLER	0x82
    187  0  stevel 
    188  0  stevel 
    189  0  stevel uint16_t get_short(uint8_t *);
    190  0  stevel uint32_t get_long(uint8_t *);
    191  0  stevel 
    192  0  stevel extern void interpret_aarp(int, char *, int);
    193  0  stevel extern void interpret_at(int, struct ddp_hdr *, int);
    194  0  stevel extern void interpret_nbp(int, struct nbp_hdr *, int);
    195  0  stevel extern void interpret_rtmp(int, struct ddp_hdr *, int);
    196  0  stevel extern void interpret_aecho(int, struct ddp_hdr *, int);
    197  0  stevel extern void interpret_atp(int, struct ddp_hdr *, int);
    198  0  stevel extern void interpret_adsp(int, struct ddp_adsphdr *, int);
    199  0  stevel extern void interpret_ddp_zip(int, struct zip_hdr *, int);
    200  0  stevel extern void interpret_atp_zip(int, struct atp_hdr *, int);
    201  0  stevel 
    202  0  stevel #ifdef __cplusplus
    203  0  stevel }
    204  0  stevel #endif
    205  0  stevel 
    206  0  stevel #endif /* _AT_H */
    207