Home | History | Annotate | Line # | Download | only in netatalk
      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