1 1.10 thorpej /* $NetBSD: at_var.h,v 1.10 2022/09/03 01:48:22 thorpej Exp $ */ 2 1.1 christos 3 1.1 christos /* 4 1.1 christos * Copyright (c) 1990,1991 Regents of The University of Michigan. 5 1.1 christos * All Rights Reserved. 6 1.1 christos * 7 1.1 christos * Permission to use, copy, modify, and distribute this software and 8 1.1 christos * its documentation for any purpose and without fee is hereby granted, 9 1.1 christos * provided that the above copyright notice appears in all copies and 10 1.1 christos * that both that copyright notice and this permission notice appear 11 1.1 christos * in supporting documentation, and that the name of The University 12 1.1 christos * of Michigan not be used in advertising or publicity pertaining to 13 1.1 christos * distribution of the software without specific, written prior 14 1.1 christos * permission. This software is supplied as is without expressed or 15 1.1 christos * implied warranties of any kind. 16 1.1 christos * 17 1.1 christos * This product includes software developed by the University of 18 1.1 christos * California, Berkeley and its contributors. 19 1.1 christos * 20 1.1 christos * Research Systems Unix Group 21 1.1 christos * The University of Michigan 22 1.1 christos * c/o Wesley Craig 23 1.1 christos * 535 W. William Street 24 1.1 christos * Ann Arbor, Michigan 25 1.1 christos * +1-313-764-2278 26 1.1 christos * netatalk (at) umich.edu 27 1.1 christos */ 28 1.1 christos 29 1.1 christos #ifndef _NETATALK_AT_VAR_H_ 30 1.4 elad #define _NETATALK_AT_VAR_H_ 31 1.2 thorpej 32 1.2 thorpej #include <sys/callout.h> 33 1.2 thorpej 34 1.1 christos /* 35 1.1 christos * For phase2, we need to keep not only our address on an interface, 36 1.1 christos * but also the legal networks on the interface. 37 1.1 christos */ 38 1.1 christos struct at_ifaddr { 39 1.1 christos struct ifaddr aa_ifa; 40 1.1 christos #define aa_ifp aa_ifa.ifa_ifp 41 1.1 christos struct sockaddr_at aa_addr; 42 1.1 christos struct sockaddr_at aa_broadaddr; 43 1.1 christos #define aa_dstaddr aa_broadaddr; 44 1.1 christos struct sockaddr_at aa_netmask; 45 1.1 christos int aa_flags; 46 1.1 christos u_short aa_firstnet, aa_lastnet; 47 1.1 christos int aa_probcnt; 48 1.1 christos TAILQ_ENTRY(at_ifaddr) aa_list; /* list of appletalk addresses */ 49 1.2 thorpej struct callout aa_probe_ch; /* for aarpprobe() */ 50 1.1 christos }; 51 1.1 christos 52 1.1 christos struct at_aliasreq { 53 1.1 christos char ifra_name[IFNAMSIZ]; 54 1.1 christos struct sockaddr_at ifra_addr; 55 1.1 christos struct sockaddr_at ifra_broadaddr; 56 1.1 christos #define ifra_dstaddr ifra_broadaddr 57 1.1 christos struct sockaddr_at ifra_mask; 58 1.1 christos }; 59 1.1 christos 60 1.1 christos #define AA_SAT(aa) \ 61 1.1 christos (&(aa->aa_addr)) 62 1.1 christos #define satosat(sa) ((struct sockaddr_at *)(sa)) 63 1.5 dyoung #define satocsat(sa) ((const struct sockaddr_at *)(sa)) 64 1.1 christos 65 1.1 christos #define AFA_ROUTE 0x0001 66 1.1 christos #define AFA_PROBING 0x0002 67 1.1 christos #define AFA_PHASE2 0x0004 68 1.1 christos 69 1.1 christos #ifdef _KERNEL 70 1.10 thorpej 71 1.10 thorpej #include <net/pktqueue.h> 72 1.10 thorpej 73 1.6 dyoung int sockaddr_at_cmp(const struct sockaddr *, const struct sockaddr *); 74 1.6 dyoung 75 1.8 christos static __inline void 76 1.6 dyoung sockaddr_at_init1(struct sockaddr_at *sat, const struct at_addr *addr, 77 1.6 dyoung uint8_t port) 78 1.6 dyoung { 79 1.6 dyoung sat->sat_port = port; 80 1.6 dyoung sat->sat_addr = *addr; 81 1.6 dyoung } 82 1.6 dyoung 83 1.8 christos static __inline void 84 1.6 dyoung sockaddr_at_init(struct sockaddr_at *sat, const struct at_addr *addr, 85 1.6 dyoung uint8_t port) 86 1.6 dyoung { 87 1.9 maxv memset(sat, 0, sizeof(*sat)); 88 1.6 dyoung sat->sat_family = AF_APPLETALK; 89 1.6 dyoung sat->sat_len = sizeof(*sat); 90 1.6 dyoung sockaddr_at_init1(sat, addr, port); 91 1.6 dyoung } 92 1.6 dyoung 93 1.8 christos static __inline struct sockaddr * 94 1.6 dyoung sockaddr_at_alloc(const struct at_addr *addr, uint8_t port, int flags) 95 1.6 dyoung { 96 1.6 dyoung struct sockaddr *sa; 97 1.6 dyoung 98 1.9 maxv sa = sockaddr_alloc(AF_APPLETALK, sizeof(struct sockaddr_at), 99 1.9 maxv flags | M_ZERO); 100 1.7 dyoung 101 1.7 dyoung if (sa == NULL) 102 1.6 dyoung return NULL; 103 1.6 dyoung 104 1.6 dyoung sockaddr_at_init1(satosat(sa), addr, port); 105 1.6 dyoung 106 1.6 dyoung return sa; 107 1.6 dyoung } 108 1.1 christos TAILQ_HEAD(at_ifaddrhead, at_ifaddr); 109 1.1 christos extern struct at_ifaddrhead at_ifaddr; 110 1.10 thorpej extern pktqueue_t *at_pktq1, *at_pktq2; 111 1.1 christos #endif 112 1.1 christos 113 1.4 elad #endif /* !_NETATALK_AT_VAR_H_ */ 114