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