Home | History | Annotate | Line # | Download | only in netatalk
at_var.h revision 1.8
      1 /*	$NetBSD: at_var.h,v 1.8 2018/04/19 21:50:10 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_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