1 | /* $NetBSD: at_var.h,v 1.7 2007/08/30 02:17:36 dyoung 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_VAR_H_ |
30 | #define _NETATALK_AT_VAR_H_ |
31 | |
32 | #include <sys/callout.h> |
33 | |
34 | /* |
35 | * For phase2, we need to keep not only our address on an interface, |
36 | * but also the legal networks on the interface. |
37 | */ |
38 | struct at_ifaddr { |
39 | struct ifaddr aa_ifa; |
40 | #define aa_ifp aa_ifa.ifa_ifp |
41 | struct sockaddr_at aa_addr; |
42 | struct sockaddr_at aa_broadaddr; |
43 | #define aa_dstaddr aa_broadaddr; |
44 | struct sockaddr_at aa_netmask; |
45 | int aa_flags; |
46 | u_short aa_firstnet, aa_lastnet; |
47 | int aa_probcnt; |
48 | TAILQ_ENTRY(at_ifaddr) aa_list; /* list of appletalk addresses */ |
49 | struct callout aa_probe_ch; /* for aarpprobe() */ |
50 | }; |
51 | |
52 | struct at_aliasreq { |
53 | char ifra_name[IFNAMSIZ]; |
54 | struct sockaddr_at ifra_addr; |
55 | struct sockaddr_at ifra_broadaddr; |
56 | #define ifra_dstaddr ifra_broadaddr |
57 | struct sockaddr_at ifra_mask; |
58 | }; |
59 | |
60 | #define AA_SAT(aa) \ |
61 | (&(aa->aa_addr)) |
62 | #define satosat(sa) ((struct sockaddr_at *)(sa)) |
63 | #define satocsat(sa) ((const struct sockaddr_at *)(sa)) |
64 | |
65 | #define AFA_ROUTE 0x0001 |
66 | #define AFA_PROBING 0x0002 |
67 | #define AFA_PHASE2 0x0004 |
68 | |
69 | #ifdef _KERNEL |
70 | int sockaddr_at_cmp(const struct sockaddr *, const struct sockaddr *); |
71 | |
72 | static inline void |
73 | sockaddr_at_init1(struct sockaddr_at *sat, const struct at_addr *addr, |
74 | uint8_t port) |
75 | { |
76 | sat->sat_port = port; |
77 | sat->sat_addr = *addr; |
78 | memset(&sat->sat_range, 0, sizeof(sat->sat_range)); |
79 | } |
80 | |
81 | static inline void |
82 | sockaddr_at_init(struct sockaddr_at *sat, const struct at_addr *addr, |
83 | uint8_t port) |
84 | { |
85 | sat->sat_family = AF_APPLETALK; |
86 | sat->sat_len = sizeof(*sat); |
87 | sockaddr_at_init1(sat, addr, port); |
88 | } |
89 | |
90 | static inline struct sockaddr * |
91 | sockaddr_at_alloc(const struct at_addr *addr, uint8_t port, int flags) |
92 | { |
93 | struct sockaddr *sa; |
94 | |
95 | sa = sockaddr_alloc(AF_APPLETALK, sizeof(struct sockaddr_at), flags); |
96 | |
97 | if (sa == NULL) |
98 | return NULL; |
99 | |
100 | sockaddr_at_init1(satosat(sa), addr, port); |
101 | |
102 | return sa; |
103 | } |
104 | TAILQ_HEAD(at_ifaddrhead, at_ifaddr); |
105 | extern struct at_ifaddrhead at_ifaddr; |
106 | extern struct ifqueue atintrq1, atintrq2; |
107 | #endif |
108 | |
109 | #endif /* !_NETATALK_AT_VAR_H_ */ |
110 | |