xref: /freebsd-src/contrib/openbsm/libbsm/bsm_domain.c (revision b626f5a73a48f44a31a200291b141e1da408a2ff)
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