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@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
35typedef __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 */
61struct 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
71struct 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 */
84struct 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
101extern struct domain atalkdomain;
102extern const struct protosw atalksw[];
103#endif
104
105#if defined(_KERNEL) || defined(_TEST)
106#define ATALK_ADDRSTRLEN 10
107
108extern struct domain atalkdomain;
109int at_print(char *, size_t, const struct at_addr *);
110int sat_print(char *, size_t, const void *);
111#endif
112
113#endif /* !_NETATALK_AT_H_ */
114