#ifndef _NETAT_AT_VAR_H_
#define _NETAT_AT_VAR_H_
#include <sys/appleapiopts.h>
#ifdef __APPLE_API_OBSOLETE
#include <sys/queue.h>
#define MAX_MCASTS 25
#define MCAST_TRACK_ADD 1
#define MCAST_TRACK_DELETE 2
#define MCAST_TRACK_CHECK 3
#define IF_TOTAL_MAX 17
#define FDDI_OR_TOKENRING(i) ((i == IFT_FDDI) || (i == IFT_ISO88025))
#define ETHERNET_ADDR_LEN 6
#define IFNAMESIZ 16
typedef struct etalk_addr {
u_char etalk_addr_octet[ETHERNET_ADDR_LEN];
} etalk_addr_t;
typedef char if_name_t[IFNAMESIZ];
typedef struct at_ifname_list {
if_name_t at_if[IF_TOTAL_MAX];
} at_ifnames_t;
typedef struct at_if_statstics {
u_long fwdBytes;
u_long fwdPkts;
u_long droppedBytes;
u_long droppedPkts;
u_long outBytes;
u_long outPkts;
u_long routes;
} at_if_statistics_t;
typedef struct {
u_int unknown_mblks;
u_int rcv_bytes;
u_int rcv_packets;
u_int xmit_bytes;
u_int xmit_packets;
} at_elap_stats_t;
typedef struct {
char ifr_name[IFNAMESIZ];
u_int flags;
struct at_addr node;
struct at_addr router;
u_short netStart;
u_short netEnd;
at_nvestr_t zonename;
} at_if_cfg_t;
typedef struct {
at_entity_t name;
at_inet_t addr;
u_char ddptype;
long unique_nbp_id;
} at_nbp_reg_t;
typedef struct {
char ifr_name[IFNAMESIZ];
at_nvestr_t zonename;
} at_def_zone_t;
typedef struct zone_usage {
int zone_index;
at_nvestr_t zone_name;
int zone_home;
at_ifnames_t zone_iflist;
char usage[IF_TOTAL_MAX];
} zone_usage_t;
typedef struct {
short multihome;
short rtmp_table_sz;
short zone_table_sz;
short router_mix;
} at_router_params_t;
typedef struct at_kern_err {
int error;
int port1;
int port2;
char name1[IFNAMESIZ];
char name2[IFNAMESIZ];
u_short net;
u_char node;
u_short netr1b, netr1e;
u_short netr2b, netr2e;
u_char rtmp_id;
} at_kern_err_t;
#define KE_CONF_RANGE 1
#define KE_CONF_SEED_RNG 2
#define KE_CONF_SEED1 3
#define KE_CONF_SEED_NODE 4
#define KE_NO_ZONES_FOUND 5
#define KE_NO_SEED 6
#define KE_INVAL_RANGE 7
#define KE_SEED_STARTUP 8
#define KE_BAD_VER 9
#define KE_RTMP_OVERFLOW 10
#define KE_ZIP_OVERFLOW 11
#ifdef KERNEL_PRIVATE
typedef struct at_ifaddr {
struct ifaddr aa_ifa;
#define aa_ifp aa_ifa.ifa_ifp
#define aa_flags aa_ifa.ifa_flags
TAILQ_ENTRY(at_ifaddr) aa_link;
int at_was_attached;
unsigned char mcast[MAX_MCASTS];
char xaddr[ETHERNET_ADDR_LEN];
at_elap_stats_t stats;
u_char ifState;
u_short ifThisCableStart;
u_short ifThisCableEnd;
struct at_addr ifARouter;
u_char ifRouterState;
u_int ifFlags;
struct sockaddr_at ifNodeAddress;
#define ifThisNode ifNodeAddress.sat_addr
u_char ifNumRetries;
u_char ifGNIScheduled;
at_nvestr_t ifZoneName;
int ifPort;
char ifName[IFNAMESIZ];
u_short ifDefZone;
char ifZipNeedQueries;
char ifRoutingState;
at_if_statistics_t
ifStatistics;
u_short flags;
struct etalk_addr ZoneMcastAddr;
struct etalk_addr cable_multicast_addr;
struct at_addr initial_addr;
at_nvestr_t startup_zone;
int startup_error,
startup_inprogress;
} at_ifaddr_t;
#endif
#define LAP_OFFLINE 0
#define LAP_ONLINE 1
#define LAP_ONLINE_FOR_ZIP 2
#define LAP_ONLINE_ZONELESS 3
#define NO_ROUTER 1
#define ROUTER_WARNING 2
#define ROUTER_AROUND 3
#define ROUTER_UPDATED 4
#define AIOCSTOPATALK _IOWR('a', 1, int)
#define AIOCGETIFCFG _IOWR('a', 2, at_if_cfg_t)
#define AIOCNBPREG _IOWR('a', 3, at_nbp_reg_t)
#define AIOCNBPREMOVE _IOW('a', 4, at_nbp_reg_t)
#define AIOCGETSTATE _IOR('a', 5, at_state_t)
#define AIOCSETDEFZONE _IOW('a', 6, at_def_zone_t)
#define AIOCSETROUTER _IOW('a', 7, at_router_params_t)
#define AIOCGETROUTER _IOR('a', 8, at_router_params_t)
#define AIOCSIFADDR _IOW('a', 9, at_if_cfg_t)
#define AIOCSTARTROUTER _IOR('a',10, at_kern_err_t)
#define AIOCREGLOCALZN _IOW('a',11, at_nvestr_t)
#define AIOCSETZNUSAGE _IOW('a',12, zone_usage_t)
#define AIOCGETZNUSAGE _IOWR('a',13, zone_usage_t)
#define LAP_STATE_MASK 0xf
#define AT_IFF_DEFAULT 0x40000
#define AT_IFF_AURP 0x20000
#define RTR_NXNET_PORT 0x10000000
#define RTR_XNET_PORT 0x20000000
#define RTR_SEED_PORT 0x40000000
#define ELAP_CFG_ZONELESS 0x01
#define ELAP_CFG_HOME 0x02
#define ELAP_CFG_SEED 0x08
#ifdef KERNEL_PRIVATE
extern TAILQ_HEAD(at_ifQueueHd, at_ifaddr) at_ifQueueHd;
int at_control(struct socket *, u_long, caddr_t, struct ifnet *);
int ddp_usrreq(struct socket *, int, struct mbuf *, struct mbuf *,
struct mbuf *);
int ddp_ctloutput(struct socket *, struct sockopt *);
void ddp_init(void);
void ddp_slowtimo(void);
#endif
#define KEV_ATALK_SUBCLASS 5
#define KEV_ATALK_ENABLED 1
#define KEV_ATALK_DISABLED 2
#define KEV_ATALK_ZONEUPDATED 3
#define KEV_ATALK_ROUTERUP 4
#define KEV_ATALK_ROUTERUP_INVALID 5
#define KEV_ATALK_ROUTERDOWN 6
#define KEV_ATALK_ZONELISTCHANGED 7
struct kev_atalk_data {
struct net_event_data link_data;
union {
struct at_addr address;
at_nvestr_t zone;
} node_data;
};
#ifdef KERNEL_PRIVATE
void atalk_post_msg(struct ifnet *ifp, u_long event_code, struct at_addr *address, at_nvestr_t *zone);
void aarp_sched_probe(void *);
void atalk_lock(void);
void atalk_unlock(void);
void appletalk_hack_start(void);
void ddp_input(gbuf_t *, at_ifaddr_t *);
struct etalk_addr;
void ddp_glean(gbuf_t *, at_ifaddr_t *, struct etalk_addr *);
int pat_output(at_ifaddr_t *, struct mbuf *, unsigned char *, int);
void ep_input(gbuf_t *, at_ifaddr_t *);
void zip_router_input(gbuf_t *, at_ifaddr_t *);
void nbp_input(gbuf_t *, at_ifaddr_t *);
void sip_input(gbuf_t *, at_ifaddr_t *);
void ioc_ack(int, gbuf_t *, gref_t *);
int ddp_adjmsg(gbuf_t *, int );
gbuf_t *ddp_growmsg(gbuf_t *, int );
struct proc;
int atalk_openref(gref_t *, int *, struct proc *);
struct fileglob;
int atalk_closeref(struct fileglob *, gref_t **);
int _ATputmsg(int, strbuf_t *, strbuf_t *, int , int *, void *);
int _ATgetmsg(int, strbuf_t *, strbuf_t *, int *, int *, void *);
int _ATsocket(int, int *, void *);
void ddp_start(void);
typedef void (*ddp_handler_func)(gbuf_t *, at_ifaddr_t *);
void add_ddp_handler(u_char, ddp_handler_func);
void init_ddp_handler(void);
int elap_wput(gref_t *gref, gbuf_t *m);
int at_ioctl(struct atpcb *, u_long, caddr_t, int );
#endif
#endif
#endif