1 /* $NetBSD: at_var.h,v 1.10 2022/09/03 01:48:22 thorpej 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_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 71 #include <net/pktqueue.h> 72 73 int sockaddr_at_cmp(const struct sockaddr *, const struct sockaddr *); 74 75 static __inline void 76 sockaddr_at_init1(struct sockaddr_at *sat, const struct at_addr *addr, 77 uint8_t port) 78 { 79 sat->sat_port = port; 80 sat->sat_addr = *addr; 81 } 82 83 static __inline void 84 sockaddr_at_init(struct sockaddr_at *sat, const struct at_addr *addr, 85 uint8_t port) 86 { 87 memset(sat, 0, sizeof(*sat)); 88 sat->sat_family = AF_APPLETALK; 89 sat->sat_len = sizeof(*sat); 90 sockaddr_at_init1(sat, addr, port); 91 } 92 93 static __inline struct sockaddr * 94 sockaddr_at_alloc(const struct at_addr *addr, uint8_t port, int flags) 95 { 96 struct sockaddr *sa; 97 98 sa = sockaddr_alloc(AF_APPLETALK, sizeof(struct sockaddr_at), 99 flags | M_ZERO); 100 101 if (sa == NULL) 102 return NULL; 103 104 sockaddr_at_init1(satosat(sa), addr, port); 105 106 return sa; 107 } 108 TAILQ_HEAD(at_ifaddrhead, at_ifaddr); 109 extern struct at_ifaddrhead at_ifaddr; 110 extern pktqueue_t *at_pktq1, *at_pktq2; 111 #endif 112 113 #endif /* !_NETATALK_AT_VAR_H_ */ 114