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