1*c74c7b73SRobert Watson /*-
2*c74c7b73SRobert Watson * Copyright (c) 2008 Apple Inc.
3*c74c7b73SRobert Watson * All rights reserved.
4*c74c7b73SRobert Watson *
5*c74c7b73SRobert Watson * Redistribution and use in source and binary forms, with or without
6*c74c7b73SRobert Watson * modification, are permitted provided that the following conditions
7*c74c7b73SRobert Watson * are met:
8*c74c7b73SRobert Watson * 1. Redistributions of source code must retain the above copyright
9*c74c7b73SRobert Watson * notice, this list of conditions and the following disclaimer.
10*c74c7b73SRobert Watson * 2. Redistributions in binary form must reproduce the above copyright
11*c74c7b73SRobert Watson * notice, this list of conditions and the following disclaimer in the
12*c74c7b73SRobert Watson * documentation and/or other materials provided with the distribution.
13*c74c7b73SRobert Watson * 3. Neither the name of Apple Inc. ("Apple") nor the names of
14*c74c7b73SRobert Watson * its contributors may be used to endorse or promote products derived
15*c74c7b73SRobert Watson * from this software without specific prior written permission.
16*c74c7b73SRobert Watson *
17*c74c7b73SRobert Watson * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND
18*c74c7b73SRobert Watson * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19*c74c7b73SRobert Watson * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20*c74c7b73SRobert Watson * ARE DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR
21*c74c7b73SRobert Watson * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22*c74c7b73SRobert Watson * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23*c74c7b73SRobert Watson * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24*c74c7b73SRobert Watson * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
25*c74c7b73SRobert Watson * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
26*c74c7b73SRobert Watson * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27*c74c7b73SRobert Watson * POSSIBILITY OF SUCH DAMAGE.
28*c74c7b73SRobert Watson */
29*c74c7b73SRobert Watson
30*c74c7b73SRobert Watson #include <sys/types.h>
31*c74c7b73SRobert Watson #include <sys/socket.h>
32*c74c7b73SRobert Watson
33*c74c7b73SRobert Watson #include <config/config.h>
34*c74c7b73SRobert Watson
35*c74c7b73SRobert Watson #include <bsm/audit_domain.h>
36*c74c7b73SRobert Watson #include <bsm/libbsm.h>
37*c74c7b73SRobert Watson
38*c74c7b73SRobert Watson struct bsm_domain {
39*c74c7b73SRobert Watson u_short bd_bsm_domain;
40*c74c7b73SRobert Watson int bd_local_domain;
41*c74c7b73SRobert Watson };
42*c74c7b73SRobert Watson
43*c74c7b73SRobert Watson #define PF_NO_LOCAL_MAPPING -600
44*c74c7b73SRobert Watson
45*c74c7b73SRobert Watson static const struct bsm_domain bsm_domains[] = {
46*c74c7b73SRobert Watson { BSM_PF_UNSPEC, PF_UNSPEC },
47*c74c7b73SRobert Watson { BSM_PF_LOCAL, PF_LOCAL },
48*c74c7b73SRobert Watson { BSM_PF_INET, PF_INET },
49*c74c7b73SRobert Watson { BSM_PF_IMPLINK,
50*c74c7b73SRobert Watson #ifdef PF_IMPLINK
51*c74c7b73SRobert Watson PF_IMPLINK
52*c74c7b73SRobert Watson #else
53*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
54*c74c7b73SRobert Watson #endif
55*c74c7b73SRobert Watson },
56*c74c7b73SRobert Watson { BSM_PF_PUP,
57*c74c7b73SRobert Watson #ifdef PF_PUP
58*c74c7b73SRobert Watson PF_PUP
59*c74c7b73SRobert Watson #else
60*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
61*c74c7b73SRobert Watson #endif
62*c74c7b73SRobert Watson },
63*c74c7b73SRobert Watson { BSM_PF_CHAOS,
64*c74c7b73SRobert Watson #ifdef PF_CHAOS
65*c74c7b73SRobert Watson PF_CHAOS
66*c74c7b73SRobert Watson #else
67*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
68*c74c7b73SRobert Watson #endif
69*c74c7b73SRobert Watson },
70*c74c7b73SRobert Watson { BSM_PF_NS,
71*c74c7b73SRobert Watson #ifdef PF_NS
72*c74c7b73SRobert Watson PF_NS
73*c74c7b73SRobert Watson #else
74*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
75*c74c7b73SRobert Watson #endif
76*c74c7b73SRobert Watson },
77*c74c7b73SRobert Watson { BSM_PF_NBS,
78*c74c7b73SRobert Watson #ifdef PF_NBS
79*c74c7b73SRobert Watson PF_NBS
80*c74c7b73SRobert Watson #else
81*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
82*c74c7b73SRobert Watson #endif
83*c74c7b73SRobert Watson },
84*c74c7b73SRobert Watson { BSM_PF_ECMA,
85*c74c7b73SRobert Watson #ifdef PF_ECMA
86*c74c7b73SRobert Watson PF_ECMA
87*c74c7b73SRobert Watson #else
88*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
89*c74c7b73SRobert Watson #endif
90*c74c7b73SRobert Watson },
91*c74c7b73SRobert Watson { BSM_PF_DATAKIT,
92*c74c7b73SRobert Watson #ifdef PF_DATAKIT
93*c74c7b73SRobert Watson PF_DATAKIT
94*c74c7b73SRobert Watson #else
95*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
96*c74c7b73SRobert Watson #endif
97*c74c7b73SRobert Watson },
98*c74c7b73SRobert Watson { BSM_PF_CCITT,
99*c74c7b73SRobert Watson #ifdef PF_CCITT
100*c74c7b73SRobert Watson PF_CCITT
101*c74c7b73SRobert Watson #else
102*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
103*c74c7b73SRobert Watson #endif
104*c74c7b73SRobert Watson },
105*c74c7b73SRobert Watson { BSM_PF_SNA, PF_SNA },
106*c74c7b73SRobert Watson { BSM_PF_DECnet, PF_DECnet },
107*c74c7b73SRobert Watson { BSM_PF_DLI,
108*c74c7b73SRobert Watson #ifdef PF_DLI
109*c74c7b73SRobert Watson PF_DLI
110*c74c7b73SRobert Watson #else
111*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
112*c74c7b73SRobert Watson #endif
113*c74c7b73SRobert Watson },
114*c74c7b73SRobert Watson { BSM_PF_LAT,
115*c74c7b73SRobert Watson #ifdef PF_LAT
116*c74c7b73SRobert Watson PF_LAT
117*c74c7b73SRobert Watson #else
118*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
119*c74c7b73SRobert Watson #endif
120*c74c7b73SRobert Watson },
121*c74c7b73SRobert Watson { BSM_PF_HYLINK,
122*c74c7b73SRobert Watson #ifdef PF_HYLINK
123*c74c7b73SRobert Watson PF_HYLINK
124*c74c7b73SRobert Watson #else
125*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
126*c74c7b73SRobert Watson #endif
127*c74c7b73SRobert Watson },
128*c74c7b73SRobert Watson { BSM_PF_APPLETALK, PF_APPLETALK },
129*c74c7b73SRobert Watson { BSM_PF_NIT,
130*c74c7b73SRobert Watson #ifdef PF_NIT
131*c74c7b73SRobert Watson PF_NIT
132*c74c7b73SRobert Watson #else
133*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
134*c74c7b73SRobert Watson #endif
135*c74c7b73SRobert Watson },
136*c74c7b73SRobert Watson { BSM_PF_802,
137*c74c7b73SRobert Watson #ifdef PF_802
138*c74c7b73SRobert Watson PF_802
139*c74c7b73SRobert Watson #else
140*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
141*c74c7b73SRobert Watson #endif
142*c74c7b73SRobert Watson },
143*c74c7b73SRobert Watson { BSM_PF_OSI,
144*c74c7b73SRobert Watson #ifdef PF_OSI
145*c74c7b73SRobert Watson PF_OSI
146*c74c7b73SRobert Watson #else
147*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
148*c74c7b73SRobert Watson #endif
149*c74c7b73SRobert Watson },
150*c74c7b73SRobert Watson { BSM_PF_X25,
151*c74c7b73SRobert Watson #ifdef PF_X25
152*c74c7b73SRobert Watson PF_X25
153*c74c7b73SRobert Watson #else
154*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
155*c74c7b73SRobert Watson #endif
156*c74c7b73SRobert Watson },
157*c74c7b73SRobert Watson { BSM_PF_OSINET,
158*c74c7b73SRobert Watson #ifdef PF_OSINET
159*c74c7b73SRobert Watson PF_OSINET
160*c74c7b73SRobert Watson #else
161*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
162*c74c7b73SRobert Watson #endif
163*c74c7b73SRobert Watson },
164*c74c7b73SRobert Watson { BSM_PF_GOSIP,
165*c74c7b73SRobert Watson #ifdef PF_GOSIP
166*c74c7b73SRobert Watson PF_GOSIP
167*c74c7b73SRobert Watson #else
168*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
169*c74c7b73SRobert Watson #endif
170*c74c7b73SRobert Watson },
171*c74c7b73SRobert Watson { BSM_PF_IPX, PF_IPX },
172*c74c7b73SRobert Watson { BSM_PF_ROUTE, PF_ROUTE },
173*c74c7b73SRobert Watson { BSM_PF_LINK,
174*c74c7b73SRobert Watson #ifdef PF_LINK
175*c74c7b73SRobert Watson PF_LINK
176*c74c7b73SRobert Watson #else
177*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
178*c74c7b73SRobert Watson #endif
179*c74c7b73SRobert Watson },
180*c74c7b73SRobert Watson { BSM_PF_INET6, PF_INET6 },
181*c74c7b73SRobert Watson { BSM_PF_KEY, PF_KEY },
182*c74c7b73SRobert Watson { BSM_PF_NCA,
183*c74c7b73SRobert Watson #ifdef PF_NCA
184*c74c7b73SRobert Watson PF_NCA
185*c74c7b73SRobert Watson #else
186*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
187*c74c7b73SRobert Watson #endif
188*c74c7b73SRobert Watson },
189*c74c7b73SRobert Watson { BSM_PF_POLICY,
190*c74c7b73SRobert Watson #ifdef PF_POLICY
191*c74c7b73SRobert Watson PF_POLICY
192*c74c7b73SRobert Watson #else
193*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
194*c74c7b73SRobert Watson #endif
195*c74c7b73SRobert Watson },
196*c74c7b73SRobert Watson { BSM_PF_INET_OFFLOAD,
197*c74c7b73SRobert Watson #ifdef PF_INET_OFFLOAD
198*c74c7b73SRobert Watson PF_INET_OFFLOAD
199*c74c7b73SRobert Watson #else
200*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
201*c74c7b73SRobert Watson #endif
202*c74c7b73SRobert Watson },
203*c74c7b73SRobert Watson { BSM_PF_NETBIOS,
204*c74c7b73SRobert Watson #ifdef PF_NETBIOS
205*c74c7b73SRobert Watson PF_NETBIOS
206*c74c7b73SRobert Watson #else
207*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
208*c74c7b73SRobert Watson #endif
209*c74c7b73SRobert Watson },
210*c74c7b73SRobert Watson { BSM_PF_ISO,
211*c74c7b73SRobert Watson #ifdef PF_ISO
212*c74c7b73SRobert Watson PF_ISO
213*c74c7b73SRobert Watson #else
214*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
215*c74c7b73SRobert Watson #endif
216*c74c7b73SRobert Watson },
217*c74c7b73SRobert Watson { BSM_PF_XTP,
218*c74c7b73SRobert Watson #ifdef PF_XTP
219*c74c7b73SRobert Watson PF_XTP
220*c74c7b73SRobert Watson #else
221*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
222*c74c7b73SRobert Watson #endif
223*c74c7b73SRobert Watson },
224*c74c7b73SRobert Watson { BSM_PF_COIP,
225*c74c7b73SRobert Watson #ifdef PF_COIP
226*c74c7b73SRobert Watson PF_COIP
227*c74c7b73SRobert Watson #else
228*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
229*c74c7b73SRobert Watson #endif
230*c74c7b73SRobert Watson },
231*c74c7b73SRobert Watson { BSM_PF_CNT,
232*c74c7b73SRobert Watson #ifdef PF_CNT
233*c74c7b73SRobert Watson PF_CNT
234*c74c7b73SRobert Watson #else
235*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
236*c74c7b73SRobert Watson #endif
237*c74c7b73SRobert Watson },
238*c74c7b73SRobert Watson { BSM_PF_RTIP,
239*c74c7b73SRobert Watson #ifdef PF_RTIP
240*c74c7b73SRobert Watson PF_RTIP
241*c74c7b73SRobert Watson #else
242*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
243*c74c7b73SRobert Watson #endif
244*c74c7b73SRobert Watson },
245*c74c7b73SRobert Watson { BSM_PF_SIP,
246*c74c7b73SRobert Watson #ifdef PF_SIP
247*c74c7b73SRobert Watson PF_SIP
248*c74c7b73SRobert Watson #else
249*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
250*c74c7b73SRobert Watson #endif
251*c74c7b73SRobert Watson },
252*c74c7b73SRobert Watson { BSM_PF_PIP,
253*c74c7b73SRobert Watson #ifdef PF_PIP
254*c74c7b73SRobert Watson PF_PIP
255*c74c7b73SRobert Watson #else
256*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
257*c74c7b73SRobert Watson #endif
258*c74c7b73SRobert Watson },
259*c74c7b73SRobert Watson { BSM_PF_ISDN,
260*c74c7b73SRobert Watson #ifdef PF_ISDN
261*c74c7b73SRobert Watson PF_ISDN
262*c74c7b73SRobert Watson #else
263*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
264*c74c7b73SRobert Watson #endif
265*c74c7b73SRobert Watson },
266*c74c7b73SRobert Watson { BSM_PF_E164,
267*c74c7b73SRobert Watson #ifdef PF_E164
268*c74c7b73SRobert Watson PF_E164
269*c74c7b73SRobert Watson #else
270*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
271*c74c7b73SRobert Watson #endif
272*c74c7b73SRobert Watson },
273*c74c7b73SRobert Watson { BSM_PF_NATM,
274*c74c7b73SRobert Watson #ifdef PF_NATM
275*c74c7b73SRobert Watson PF_NATM
276*c74c7b73SRobert Watson #else
277*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
278*c74c7b73SRobert Watson #endif
279*c74c7b73SRobert Watson },
280*c74c7b73SRobert Watson { BSM_PF_ATM,
281*c74c7b73SRobert Watson #ifdef PF_ATM
282*c74c7b73SRobert Watson PF_ATM
283*c74c7b73SRobert Watson #else
284*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
285*c74c7b73SRobert Watson #endif
286*c74c7b73SRobert Watson },
287*c74c7b73SRobert Watson { BSM_PF_NETGRAPH,
288*c74c7b73SRobert Watson #ifdef PF_NETGRAPH
289*c74c7b73SRobert Watson PF_NETGRAPH
290*c74c7b73SRobert Watson #else
291*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
292*c74c7b73SRobert Watson #endif
293*c74c7b73SRobert Watson },
294*c74c7b73SRobert Watson { BSM_PF_SLOW,
295*c74c7b73SRobert Watson #ifdef PF_SLOW
296*c74c7b73SRobert Watson PF_SLOW
297*c74c7b73SRobert Watson #else
298*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
299*c74c7b73SRobert Watson #endif
300*c74c7b73SRobert Watson },
301*c74c7b73SRobert Watson { BSM_PF_SCLUSTER,
302*c74c7b73SRobert Watson #ifdef PF_SCLUSTER
303*c74c7b73SRobert Watson PF_SCLUSTER
304*c74c7b73SRobert Watson #else
305*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
306*c74c7b73SRobert Watson #endif
307*c74c7b73SRobert Watson },
308*c74c7b73SRobert Watson { BSM_PF_ARP,
309*c74c7b73SRobert Watson #ifdef PF_ARP
310*c74c7b73SRobert Watson PF_ARP
311*c74c7b73SRobert Watson #else
312*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
313*c74c7b73SRobert Watson #endif
314*c74c7b73SRobert Watson },
315*c74c7b73SRobert Watson { BSM_PF_BLUETOOTH,
316*c74c7b73SRobert Watson #ifdef PF_BLUETOOTH
317*c74c7b73SRobert Watson PF_BLUETOOTH
318*c74c7b73SRobert Watson #else
319*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
320*c74c7b73SRobert Watson #endif
321*c74c7b73SRobert Watson },
322*c74c7b73SRobert Watson { BSM_PF_AX25,
323*c74c7b73SRobert Watson #ifdef PF_AX25
324*c74c7b73SRobert Watson PF_AX25
325*c74c7b73SRobert Watson #else
326*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
327*c74c7b73SRobert Watson #endif
328*c74c7b73SRobert Watson },
329*c74c7b73SRobert Watson { BSM_PF_ROSE,
330*c74c7b73SRobert Watson #ifdef PF_ROSE
331*c74c7b73SRobert Watson PF_ROSE
332*c74c7b73SRobert Watson #else
333*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
334*c74c7b73SRobert Watson #endif
335*c74c7b73SRobert Watson },
336*c74c7b73SRobert Watson { BSM_PF_NETBEUI,
337*c74c7b73SRobert Watson #ifdef PF_NETBEUI
338*c74c7b73SRobert Watson PF_NETBEUI
339*c74c7b73SRobert Watson #else
340*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
341*c74c7b73SRobert Watson #endif
342*c74c7b73SRobert Watson },
343*c74c7b73SRobert Watson { BSM_PF_SECURITY,
344*c74c7b73SRobert Watson #ifdef PF_SECURITY
345*c74c7b73SRobert Watson PF_SECURITY
346*c74c7b73SRobert Watson #else
347*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
348*c74c7b73SRobert Watson #endif
349*c74c7b73SRobert Watson },
350*c74c7b73SRobert Watson { BSM_PF_PACKET,
351*c74c7b73SRobert Watson #ifdef PF_PACKET
352*c74c7b73SRobert Watson PF_PACKET
353*c74c7b73SRobert Watson #else
354*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
355*c74c7b73SRobert Watson #endif
356*c74c7b73SRobert Watson },
357*c74c7b73SRobert Watson { BSM_PF_ASH,
358*c74c7b73SRobert Watson #ifdef PF_ASH
359*c74c7b73SRobert Watson PF_ASH
360*c74c7b73SRobert Watson #else
361*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
362*c74c7b73SRobert Watson #endif
363*c74c7b73SRobert Watson },
364*c74c7b73SRobert Watson { BSM_PF_ECONET,
365*c74c7b73SRobert Watson #ifdef PF_ECONET
366*c74c7b73SRobert Watson PF_ECONET
367*c74c7b73SRobert Watson #else
368*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
369*c74c7b73SRobert Watson #endif
370*c74c7b73SRobert Watson },
371*c74c7b73SRobert Watson { BSM_PF_ATMSVC,
372*c74c7b73SRobert Watson #ifdef PF_ATMSVC
373*c74c7b73SRobert Watson PF_ATMSVC
374*c74c7b73SRobert Watson #else
375*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
376*c74c7b73SRobert Watson #endif
377*c74c7b73SRobert Watson },
378*c74c7b73SRobert Watson { BSM_PF_IRDA,
379*c74c7b73SRobert Watson #ifdef PF_IRDA
380*c74c7b73SRobert Watson PF_IRDA
381*c74c7b73SRobert Watson #else
382*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
383*c74c7b73SRobert Watson #endif
384*c74c7b73SRobert Watson },
385*c74c7b73SRobert Watson { BSM_PF_PPPOX,
386*c74c7b73SRobert Watson #ifdef PF_PPPOX
387*c74c7b73SRobert Watson PF_PPPOX
388*c74c7b73SRobert Watson #else
389*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
390*c74c7b73SRobert Watson #endif
391*c74c7b73SRobert Watson },
392*c74c7b73SRobert Watson { BSM_PF_WANPIPE,
393*c74c7b73SRobert Watson #ifdef PF_WANPIPE
394*c74c7b73SRobert Watson PF_WANPIPE
395*c74c7b73SRobert Watson #else
396*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
397*c74c7b73SRobert Watson #endif
398*c74c7b73SRobert Watson },
399*c74c7b73SRobert Watson { BSM_PF_LLC,
400*c74c7b73SRobert Watson #ifdef PF_LLC
401*c74c7b73SRobert Watson PF_LLC
402*c74c7b73SRobert Watson #else
403*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
404*c74c7b73SRobert Watson #endif
405*c74c7b73SRobert Watson },
406*c74c7b73SRobert Watson { BSM_PF_CAN,
407*c74c7b73SRobert Watson #ifdef PF_CAN
408*c74c7b73SRobert Watson PF_CAN
409*c74c7b73SRobert Watson #else
410*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
411*c74c7b73SRobert Watson #endif
412*c74c7b73SRobert Watson },
413*c74c7b73SRobert Watson { BSM_PF_TIPC,
414*c74c7b73SRobert Watson #ifdef PF_TIPC
415*c74c7b73SRobert Watson PF_TIPC
416*c74c7b73SRobert Watson #else
417*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
418*c74c7b73SRobert Watson #endif
419*c74c7b73SRobert Watson },
420*c74c7b73SRobert Watson { BSM_PF_IUCV,
421*c74c7b73SRobert Watson #ifdef PF_IUCV
422*c74c7b73SRobert Watson PF_IUCV
423*c74c7b73SRobert Watson #else
424*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
425*c74c7b73SRobert Watson #endif
426*c74c7b73SRobert Watson },
427*c74c7b73SRobert Watson { BSM_PF_RXRPC,
428*c74c7b73SRobert Watson #ifdef PF_RXRPC
429*c74c7b73SRobert Watson PF_RXRPC
430*c74c7b73SRobert Watson #else
431*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
432*c74c7b73SRobert Watson #endif
433*c74c7b73SRobert Watson },
434*c74c7b73SRobert Watson { BSM_PF_PHONET,
435*c74c7b73SRobert Watson #ifdef PF_PHONET
436*c74c7b73SRobert Watson PF_PHONET
437*c74c7b73SRobert Watson #else
438*c74c7b73SRobert Watson PF_NO_LOCAL_MAPPING
439*c74c7b73SRobert Watson #endif
440*c74c7b73SRobert Watson },
441*c74c7b73SRobert Watson };
442*c74c7b73SRobert Watson static const int bsm_domains_count = sizeof(bsm_domains) /
443*c74c7b73SRobert Watson sizeof(bsm_domains[0]);
444*c74c7b73SRobert Watson
445*c74c7b73SRobert Watson static const struct bsm_domain *
bsm_lookup_local_domain(int local_domain)446*c74c7b73SRobert Watson bsm_lookup_local_domain(int local_domain)
447*c74c7b73SRobert Watson {
448*c74c7b73SRobert Watson int i;
449*c74c7b73SRobert Watson
450*c74c7b73SRobert Watson for (i = 0; i < bsm_domains_count; i++) {
451*c74c7b73SRobert Watson if (bsm_domains[i].bd_local_domain == local_domain)
452*c74c7b73SRobert Watson return (&bsm_domains[i]);
453*c74c7b73SRobert Watson }
454*c74c7b73SRobert Watson return (NULL);
455*c74c7b73SRobert Watson }
456*c74c7b73SRobert Watson
457*c74c7b73SRobert Watson u_short
au_domain_to_bsm(int local_domain)458*c74c7b73SRobert Watson au_domain_to_bsm(int local_domain)
459*c74c7b73SRobert Watson {
460*c74c7b73SRobert Watson const struct bsm_domain *bstp;
461*c74c7b73SRobert Watson
462*c74c7b73SRobert Watson bstp = bsm_lookup_local_domain(local_domain);
463*c74c7b73SRobert Watson if (bstp == NULL)
464*c74c7b73SRobert Watson return (BSM_PF_UNKNOWN);
465*c74c7b73SRobert Watson return (bstp->bd_bsm_domain);
466*c74c7b73SRobert Watson }
467*c74c7b73SRobert Watson
468*c74c7b73SRobert Watson static const struct bsm_domain *
bsm_lookup_bsm_domain(u_short bsm_domain)469*c74c7b73SRobert Watson bsm_lookup_bsm_domain(u_short bsm_domain)
470*c74c7b73SRobert Watson {
471*c74c7b73SRobert Watson int i;
472*c74c7b73SRobert Watson
473*c74c7b73SRobert Watson for (i = 0; i < bsm_domains_count; i++) {
474*c74c7b73SRobert Watson if (bsm_domains[i].bd_bsm_domain == bsm_domain)
475*c74c7b73SRobert Watson return (&bsm_domains[i]);
476*c74c7b73SRobert Watson }
477*c74c7b73SRobert Watson return (NULL);
478*c74c7b73SRobert Watson }
479*c74c7b73SRobert Watson
480*c74c7b73SRobert Watson int
au_bsm_to_domain(u_short bsm_domain,int * local_domainp)481*c74c7b73SRobert Watson au_bsm_to_domain(u_short bsm_domain, int *local_domainp)
482*c74c7b73SRobert Watson {
483*c74c7b73SRobert Watson const struct bsm_domain *bstp;
484*c74c7b73SRobert Watson
485*c74c7b73SRobert Watson bstp = bsm_lookup_bsm_domain(bsm_domain);
486*c74c7b73SRobert Watson if (bstp == NULL || bstp->bd_local_domain)
487*c74c7b73SRobert Watson return (-1);
488*c74c7b73SRobert Watson *local_domainp = bstp->bd_local_domain;
489*c74c7b73SRobert Watson return (0);
490*c74c7b73SRobert Watson }
491