Home | History | Annotate | Line # | Download | only in netatalk
      1 /*	$NetBSD: at.h,v 1.8 2014/12/02 19:33:44 christos Exp $	*/
      2 
      3 /*
      4  * Copyright (c) 1990,1991 Regents of The University of Michigan.
      5  * All Rights Reserved.
      6  *
      7  * Permission to use, copy, modify, and distribute this software and
      8  * its documentation for any purpose and without fee is hereby granted,
      9  * provided that the above copyright notice appears in all copies and
     10  * that both that copyright notice and this permission notice appear
     11  * in supporting documentation, and that the name of The University
     12  * of Michigan not be used in advertising or publicity pertaining to
     13  * distribution of the software without specific, written prior
     14  * permission. This software is supplied as is without expressed or
     15  * implied warranties of any kind.
     16  *
     17  * This product includes software developed by the University of
     18  * California, Berkeley and its contributors.
     19  *
     20  *	Research Systems Unix Group
     21  *	The University of Michigan
     22  *	c/o Wesley Craig
     23  *	535 W. William Street
     24  *	Ann Arbor, Michigan
     25  *	+1-313-764-2278
     26  *	netatalk (at) umich.edu
     27  */
     28 
     29 #ifndef _NETATALK_AT_H_
     30 #define _NETATALK_AT_H_
     31 
     32 #include <sys/ansi.h>
     33 
     34 #ifndef sa_family_t
     35 typedef __sa_family_t	sa_family_t;
     36 #define sa_family_t	__sa_family_t
     37 #endif
     38 
     39 /*
     40  * Supported protocols
     41  */
     42 #define ATPROTO_DDP	0
     43 #define ATPROTO_AARP	254
     44 
     45 #define DDP_MAXSZ	587
     46 
     47 /*
     48  * If ATPORT_FIRST <= Port < ATPORT_RESERVED,
     49  * Port was created by a privileged process.
     50  * If ATPORT_RESERVED <= Port < ATPORT_LAST,
     51  * Port was not necessarily created by a
     52  * privileged process.
     53  */
     54 #define ATPORT_FIRST	1
     55 #define ATPORT_RESERVED	128
     56 #define ATPORT_LAST	255
     57 
     58 /*
     59  * AppleTalk address.
     60  */
     61 struct at_addr {
     62 	uint16_t         s_net;
     63 	uint8_t          s_node;
     64 };
     65 
     66 #define ATADDR_ANYNET	(uint16_t)0x0000
     67 #define ATADDR_ANYNODE	(uint8_t)0x00
     68 #define ATADDR_ANYPORT	(uint8_t)0x00
     69 #define ATADDR_BCAST	(uint8_t)0xff	/* There is no BCAST for NET */
     70 
     71 struct netrange {
     72 	uint8_t		nr_phase;
     73 	uint16_t	nr_firstnet;
     74 	uint16_t	nr_lastnet;
     75 };
     76 
     77 /*
     78  * Socket address, AppleTalk style.  We keep magic information in the
     79  * zero bytes.  There are three types, NONE, CONFIG which has the phase
     80  * and a net range, and IFACE which has the network address of an
     81  * interface.  IFACE may be filled in by the client, and is filled in
     82  * by the kernel.
     83  */
     84 struct sockaddr_at {
     85 	uint8_t		sat_len;
     86 	sa_family_t	sat_family;
     87 	uint8_t		sat_port;
     88 	struct at_addr  sat_addr;
     89 	union {
     90 		struct netrange r_netrange;
     91 		char            r_zero[8];	/* Hide a struct netrange in
     92 						 * here */
     93 	} sat_range;
     94 };
     95 
     96 #define sat_zero sat_range.r_zero
     97 
     98 #ifdef _KERNEL
     99 #include <sys/protosw.h>
    100 
    101 extern struct domain atalkdomain;
    102 extern const struct protosw atalksw[];
    103 #endif
    104 
    105 #if defined(_KERNEL) || defined(_TEST)
    106 #define ATALK_ADDRSTRLEN 10
    107 
    108 extern struct domain atalkdomain;
    109 int at_print(char *, size_t, const struct at_addr *);
    110 int sat_print(char *, size_t, const void *);
    111 #endif
    112 
    113 #endif	/* !_NETATALK_AT_H_ */
    114