]>
Commit | Line | Data |
---|---|---|
1 | /* | |
2 | * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. | |
3 | * | |
4 | * @APPLE_LICENSE_HEADER_START@ | |
5 | * | |
6 | * The contents of this file constitute Original Code as defined in and | |
7 | * are subject to the Apple Public Source License Version 1.1 (the | |
8 | * "License"). You may not use this file except in compliance with the | |
9 | * License. Please obtain a copy of the License at | |
10 | * http://www.apple.com/publicsource and read it before using this file. | |
11 | * | |
12 | * This Original Code and all software distributed under the License are | |
13 | * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER | |
14 | * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, | |
15 | * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, | |
16 | * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the | |
17 | * License for the specific language governing rights and limitations | |
18 | * under the License. | |
19 | * | |
20 | * @APPLE_LICENSE_HEADER_END@ | |
21 | */ | |
22 | /* Copyright (c) 1997, 1998 Apple Computer, Inc. All Rights Reserved */ | |
23 | /* | |
24 | * @(#)if_blue.h 1.1 (MacOSX) 6/10/43 | |
25 | * Justin Walker | |
26 | * 970520 - First version | |
27 | * 980130 - Second version - performance improvements | |
28 | */ | |
29 | ||
30 | #ifndef _IF_BLUE_H | |
31 | #define _IF_BLUE_H | |
32 | ||
33 | #define BLUE_DEBUG 0 | |
34 | ||
35 | /* | |
36 | * Y-adapter filter mechanism. | |
37 | * Specifies the Atalk or IP network address of this node. | |
38 | * If BF_ALLOC is set and BF_VALID is not, the corresponding | |
39 | * protocol type should be captured. | |
40 | */ | |
41 | struct BlueFilter | |
42 | { | |
43 | #define IFNAMSIZ 16 | |
44 | char ifr_name[IFNAMSIZ]; /* if name, e.g. "en0" */ | |
45 | short BF_flags; | |
46 | unsigned long BF_address; /* IP address or Atalk Network # */ | |
47 | unsigned char BF_node; /* Atalk node # */ | |
48 | #ifdef notyet | |
49 | struct ifnet *BF_if; /* Destination of "passed" pkts */ | |
50 | #endif | |
51 | }; | |
52 | ||
53 | #define BF_ALLOC 0x01 /* Entry in use */ | |
54 | #define BF_DEALLOC 0x02 /* Clear matching entry */ | |
55 | #define BF_VALID 0x04 /* Address is valid */ | |
56 | #define BF_ATALK 0x08 /* Appletalk network address */ | |
57 | #define BF_IP 0x10 /* IP network address */ | |
58 | ||
59 | struct Ystats | |
60 | { char YS_name[IFNAMSIZ]; /* if name, e.g. "en0" */ | |
61 | struct BlueFilter YS_filter[2]; | |
62 | pid_t YS_blue_pid; | |
63 | int YS_pkts_up; | |
64 | int YS_pkts_out; | |
65 | int YS_pkts_looped_r2b; | |
66 | int YS_pkts_looped_b2r; | |
67 | int YS_no_bufs1; | |
68 | int YS_no_bufs2; | |
69 | int YS_full_sockbuf; | |
70 | }; | |
71 | ||
72 | struct ifnet_blue | |
73 | { struct ifnet ifb_ifn; | |
74 | struct socket *ifb_so; | |
75 | pid_t blue_pid; | |
76 | int sig_to_send; | |
77 | int sig_sent; /* Set when new pkt arrives; cleared when mt */ | |
78 | struct BlueFilter filter[2]; /* Only need to check IP, A/talk */ | |
79 | /* Stats */ | |
80 | int pkts_up; | |
81 | int pkts_out; | |
82 | int pkts_looped_r2b; | |
83 | int pkts_looped_b2r; | |
84 | int no_bufs1; /* splitter_input got null mbuf */ | |
85 | int no_bufs2; /* ndrv_output couldn't dup mbuf */ | |
86 | int full_sockbuf; | |
87 | }; | |
88 | ||
89 | /* Preallocate slots in blue_if to simplify filtering */ | |
90 | #define BFS_ATALK 0x0 /* The Atalk filter */ | |
91 | #define BFS_IP 0x1 /* The IP filter */ | |
92 | ||
93 | #define SIOCSSPLITTER _IOW('i', 123, struct ifreq) /* set 'splitter' */ | |
94 | #define SIOCGSPLITTER _IOR('i', 122, struct ifreq) /* get 'splitter' */ | |
95 | #define SIOCGSPLTSTAT _IOWR('i', 121, struct Ystats) | |
96 | #define SIOCSSPLTFILT _IOW('i', 120, struct BlueFilter) | |
97 | #define SIOCZSPLTSTAT _IO('i', 119) /* Clear stats */ | |
98 | ||
99 | /* | |
100 | * Config structure for the Y adapter - NYI | |
101 | */ | |
102 | struct if_splitter | |
103 | { char ifs_on; /* 1=>on */ | |
104 | char ifs_qmax; /* !0 => maxqlen */ | |
105 | short ifs_wait; /* Time to wait for signal */ | |
106 | short ifs_sig; /* Signal to send */ | |
107 | short ifs_pad; /* Extra space */ | |
108 | }; | |
109 | ||
110 | #ifdef KERNEL | |
111 | extern struct ifqueue blueq; /* Place to put incoming BB packets */ | |
112 | ||
113 | #define BFCount 10 | |
114 | extern struct BlueFilter RhapFilter[]; /* Filters for MacOSX side */ | |
115 | extern int BFIx; | |
116 | #endif | |
117 | #endif /* _IF_BLUE_H */ |