Source to bsd/net/if_blue.h
/*
* Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
*
* @APPLE_LICENSE_HEADER_START@
*
* The contents of this file constitute Original Code as defined in and
* are subject to the Apple Public Source License Version 1.1 (the
* "License"). You may not use this file except in compliance with the
* License. Please obtain a copy of the License at
* http://www.apple.com/publicsource and read it before using this file.
*
* This Original Code and all software distributed under the License are
* distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
* License for the specific language governing rights and limitations
* under the License.
*
* @APPLE_LICENSE_HEADER_END@
*/
/* Copyright (c) 1997, 1998 Apple Computer, Inc. All Rights Reserved */
/*
* @(#)if_blue.h 1.1 (MacOSX) 6/10/43
* Justin Walker
* 970520 - First version
* 980130 - Second version - performance improvements
*/
#ifndef _IF_BLUE_H
#define _IF_BLUE_H
#define BLUE_DEBUG 0
/*
* Y-adapter filter mechanism.
* Specifies the Atalk or IP network address of this node.
* If BF_ALLOC is set and BF_VALID is not, the corresponding
* protocol type should be captured.
*/
struct BlueFilter
{
#define IFNAMSIZ 16
char ifr_name[IFNAMSIZ]; /* if name, e.g. "en0" */
short BF_flags;
unsigned long BF_address; /* IP address or Atalk Network # */
unsigned char BF_node; /* Atalk node # */
#ifdef notyet
struct ifnet *BF_if; /* Destination of "passed" pkts */
#endif
};
#define BF_ALLOC 0x01 /* Entry in use */
#define BF_DEALLOC 0x02 /* Clear matching entry */
#define BF_VALID 0x04 /* Address is valid */
#define BF_ATALK 0x08 /* Appletalk network address */
#define BF_IP 0x10 /* IP network address */
struct Ystats
{ char YS_name[IFNAMSIZ]; /* if name, e.g. "en0" */
struct BlueFilter YS_filter[2];
pid_t YS_blue_pid;
int YS_pkts_up;
int YS_pkts_out;
int YS_pkts_looped_r2b;
int YS_pkts_looped_b2r;
int YS_no_bufs1;
int YS_no_bufs2;
int YS_full_sockbuf;
};
struct ifnet_blue
{ struct ifnet ifb_ifn;
struct socket *ifb_so;
pid_t blue_pid;
int sig_to_send;
int sig_sent; /* Set when new pkt arrives; cleared when mt */
struct BlueFilter filter[2]; /* Only need to check IP, A/talk */
/* Stats */
int pkts_up;
int pkts_out;
int pkts_looped_r2b;
int pkts_looped_b2r;
int no_bufs1; /* splitter_input got null mbuf */
int no_bufs2; /* ndrv_output couldn't dup mbuf */
int full_sockbuf;
};
/* Preallocate slots in blue_if to simplify filtering */
#define BFS_ATALK 0x0 /* The Atalk filter */
#define BFS_IP 0x1 /* The IP filter */
#define SIOCSSPLITTER _IOW('i', 123, struct ifreq) /* set 'splitter' */
#define SIOCGSPLITTER _IOR('i', 122, struct ifreq) /* get 'splitter' */
#define SIOCGSPLTSTAT _IOWR('i', 121, struct Ystats)
#define SIOCSSPLTFILT _IOW('i', 120, struct BlueFilter)
#define SIOCZSPLTSTAT _IO('i', 119) /* Clear stats */
/*
* Config structure for the Y adapter - NYI
*/
struct if_splitter
{ char ifs_on; /* 1=>on */
char ifs_qmax; /* !0 => maxqlen */
short ifs_wait; /* Time to wait for signal */
short ifs_sig; /* Signal to send */
short ifs_pad; /* Extra space */
};
#ifdef KERNEL
extern struct ifqueue blueq; /* Place to put incoming BB packets */
#define BFCount 10
extern struct BlueFilter RhapFilter[]; /* Filters for MacOSX side */
extern int BFIx;
#endif
#endif /* _IF_BLUE_H */