xref: /freebsd/contrib/openbsm/libbsm/bsm_domain.c (revision c74c7b73a005e689b922dfcfe5b94804669b595b)
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  * $P4: //depot/projects/trustedbsd/openbsm/libbsm/bsm_domain.c#2 $
30c74c7b73SRobert Watson  */
31c74c7b73SRobert Watson 
32c74c7b73SRobert Watson #include <sys/types.h>
33c74c7b73SRobert Watson #include <sys/socket.h>
34c74c7b73SRobert Watson 
35c74c7b73SRobert Watson #include <config/config.h>
36c74c7b73SRobert Watson 
37c74c7b73SRobert Watson #include <bsm/audit_domain.h>
38c74c7b73SRobert Watson #include <bsm/libbsm.h>
39c74c7b73SRobert Watson 
40c74c7b73SRobert Watson struct bsm_domain {
41c74c7b73SRobert Watson 	u_short	bd_bsm_domain;
42c74c7b73SRobert Watson 	int	bd_local_domain;
43c74c7b73SRobert Watson };
44c74c7b73SRobert Watson 
45c74c7b73SRobert Watson #define	PF_NO_LOCAL_MAPPING	-600
46c74c7b73SRobert Watson 
47c74c7b73SRobert Watson static const struct bsm_domain bsm_domains[] = {
48c74c7b73SRobert Watson 	{ BSM_PF_UNSPEC, PF_UNSPEC },
49c74c7b73SRobert Watson 	{ BSM_PF_LOCAL, PF_LOCAL },
50c74c7b73SRobert Watson 	{ BSM_PF_INET, PF_INET },
51c74c7b73SRobert Watson 	{ BSM_PF_IMPLINK,
52c74c7b73SRobert Watson #ifdef PF_IMPLINK
53c74c7b73SRobert Watson 	PF_IMPLINK
54c74c7b73SRobert Watson #else
55c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
56c74c7b73SRobert Watson #endif
57c74c7b73SRobert Watson 	},
58c74c7b73SRobert Watson 	{ BSM_PF_PUP,
59c74c7b73SRobert Watson #ifdef PF_PUP
60c74c7b73SRobert Watson 	PF_PUP
61c74c7b73SRobert Watson #else
62c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
63c74c7b73SRobert Watson #endif
64c74c7b73SRobert Watson 	},
65c74c7b73SRobert Watson 	{ BSM_PF_CHAOS,
66c74c7b73SRobert Watson #ifdef PF_CHAOS
67c74c7b73SRobert Watson 	PF_CHAOS
68c74c7b73SRobert Watson #else
69c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
70c74c7b73SRobert Watson #endif
71c74c7b73SRobert Watson 	},
72c74c7b73SRobert Watson 	{ BSM_PF_NS,
73c74c7b73SRobert Watson #ifdef PF_NS
74c74c7b73SRobert Watson 	PF_NS
75c74c7b73SRobert Watson #else
76c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
77c74c7b73SRobert Watson #endif
78c74c7b73SRobert Watson 	},
79c74c7b73SRobert Watson 	{ BSM_PF_NBS,
80c74c7b73SRobert Watson #ifdef PF_NBS
81c74c7b73SRobert Watson 	PF_NBS
82c74c7b73SRobert Watson #else
83c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
84c74c7b73SRobert Watson #endif
85c74c7b73SRobert Watson 	},
86c74c7b73SRobert Watson 	{ BSM_PF_ECMA,
87c74c7b73SRobert Watson #ifdef PF_ECMA
88c74c7b73SRobert Watson 	PF_ECMA
89c74c7b73SRobert Watson #else
90c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
91c74c7b73SRobert Watson #endif
92c74c7b73SRobert Watson 	},
93c74c7b73SRobert Watson 	{ BSM_PF_DATAKIT,
94c74c7b73SRobert Watson #ifdef PF_DATAKIT
95c74c7b73SRobert Watson 	PF_DATAKIT
96c74c7b73SRobert Watson #else
97c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
98c74c7b73SRobert Watson #endif
99c74c7b73SRobert Watson 	},
100c74c7b73SRobert Watson 	{ BSM_PF_CCITT,
101c74c7b73SRobert Watson #ifdef PF_CCITT
102c74c7b73SRobert Watson 	PF_CCITT
103c74c7b73SRobert Watson #else
104c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
105c74c7b73SRobert Watson #endif
106c74c7b73SRobert Watson 	},
107c74c7b73SRobert Watson 	{ BSM_PF_SNA, PF_SNA },
108c74c7b73SRobert Watson 	{ BSM_PF_DECnet, PF_DECnet },
109c74c7b73SRobert Watson 	{ BSM_PF_DLI,
110c74c7b73SRobert Watson #ifdef PF_DLI
111c74c7b73SRobert Watson 	PF_DLI
112c74c7b73SRobert Watson #else
113c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
114c74c7b73SRobert Watson #endif
115c74c7b73SRobert Watson 	},
116c74c7b73SRobert Watson 	{ BSM_PF_LAT,
117c74c7b73SRobert Watson #ifdef PF_LAT
118c74c7b73SRobert Watson 	PF_LAT
119c74c7b73SRobert Watson #else
120c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
121c74c7b73SRobert Watson #endif
122c74c7b73SRobert Watson 	},
123c74c7b73SRobert Watson 	{ BSM_PF_HYLINK,
124c74c7b73SRobert Watson #ifdef PF_HYLINK
125c74c7b73SRobert Watson 	PF_HYLINK
126c74c7b73SRobert Watson #else
127c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
128c74c7b73SRobert Watson #endif
129c74c7b73SRobert Watson 	},
130c74c7b73SRobert Watson 	{ BSM_PF_APPLETALK, PF_APPLETALK },
131c74c7b73SRobert Watson 	{ BSM_PF_NIT,
132c74c7b73SRobert Watson #ifdef PF_NIT
133c74c7b73SRobert Watson 	PF_NIT
134c74c7b73SRobert Watson #else
135c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
136c74c7b73SRobert Watson #endif
137c74c7b73SRobert Watson 	},
138c74c7b73SRobert Watson 	{ BSM_PF_802,
139c74c7b73SRobert Watson #ifdef PF_802
140c74c7b73SRobert Watson 	PF_802
141c74c7b73SRobert Watson #else
142c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
143c74c7b73SRobert Watson #endif
144c74c7b73SRobert Watson 	},
145c74c7b73SRobert Watson 	{ BSM_PF_OSI,
146c74c7b73SRobert Watson #ifdef PF_OSI
147c74c7b73SRobert Watson 	PF_OSI
148c74c7b73SRobert Watson #else
149c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
150c74c7b73SRobert Watson #endif
151c74c7b73SRobert Watson 	},
152c74c7b73SRobert Watson 	{ BSM_PF_X25,
153c74c7b73SRobert Watson #ifdef PF_X25
154c74c7b73SRobert Watson 	PF_X25
155c74c7b73SRobert Watson #else
156c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
157c74c7b73SRobert Watson #endif
158c74c7b73SRobert Watson 	},
159c74c7b73SRobert Watson 	{ BSM_PF_OSINET,
160c74c7b73SRobert Watson #ifdef PF_OSINET
161c74c7b73SRobert Watson 	PF_OSINET
162c74c7b73SRobert Watson #else
163c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
164c74c7b73SRobert Watson #endif
165c74c7b73SRobert Watson 	},
166c74c7b73SRobert Watson 	{ BSM_PF_GOSIP,
167c74c7b73SRobert Watson #ifdef PF_GOSIP
168c74c7b73SRobert Watson 	PF_GOSIP
169c74c7b73SRobert Watson #else
170c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
171c74c7b73SRobert Watson #endif
172c74c7b73SRobert Watson 	},
173c74c7b73SRobert Watson 	{ BSM_PF_IPX, PF_IPX },
174c74c7b73SRobert Watson 	{ BSM_PF_ROUTE, PF_ROUTE },
175c74c7b73SRobert Watson 	{ BSM_PF_LINK,
176c74c7b73SRobert Watson #ifdef PF_LINK
177c74c7b73SRobert Watson 	PF_LINK
178c74c7b73SRobert Watson #else
179c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
180c74c7b73SRobert Watson #endif
181c74c7b73SRobert Watson 	},
182c74c7b73SRobert Watson 	{ BSM_PF_INET6, PF_INET6 },
183c74c7b73SRobert Watson 	{ BSM_PF_KEY, PF_KEY },
184c74c7b73SRobert Watson 	{ BSM_PF_NCA,
185c74c7b73SRobert Watson #ifdef PF_NCA
186c74c7b73SRobert Watson 	PF_NCA
187c74c7b73SRobert Watson #else
188c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
189c74c7b73SRobert Watson #endif
190c74c7b73SRobert Watson 	},
191c74c7b73SRobert Watson 	{ BSM_PF_POLICY,
192c74c7b73SRobert Watson #ifdef PF_POLICY
193c74c7b73SRobert Watson 	PF_POLICY
194c74c7b73SRobert Watson #else
195c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
196c74c7b73SRobert Watson #endif
197c74c7b73SRobert Watson 	},
198c74c7b73SRobert Watson 	{ BSM_PF_INET_OFFLOAD,
199c74c7b73SRobert Watson #ifdef PF_INET_OFFLOAD
200c74c7b73SRobert Watson 	PF_INET_OFFLOAD
201c74c7b73SRobert Watson #else
202c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
203c74c7b73SRobert Watson #endif
204c74c7b73SRobert Watson 	},
205c74c7b73SRobert Watson 	{ BSM_PF_NETBIOS,
206c74c7b73SRobert Watson #ifdef PF_NETBIOS
207c74c7b73SRobert Watson 	PF_NETBIOS
208c74c7b73SRobert Watson #else
209c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
210c74c7b73SRobert Watson #endif
211c74c7b73SRobert Watson 	},
212c74c7b73SRobert Watson 	{ BSM_PF_ISO,
213c74c7b73SRobert Watson #ifdef PF_ISO
214c74c7b73SRobert Watson 	PF_ISO
215c74c7b73SRobert Watson #else
216c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
217c74c7b73SRobert Watson #endif
218c74c7b73SRobert Watson 	},
219c74c7b73SRobert Watson 	{ BSM_PF_XTP,
220c74c7b73SRobert Watson #ifdef PF_XTP
221c74c7b73SRobert Watson 	PF_XTP
222c74c7b73SRobert Watson #else
223c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
224c74c7b73SRobert Watson #endif
225c74c7b73SRobert Watson 	},
226c74c7b73SRobert Watson 	{ BSM_PF_COIP,
227c74c7b73SRobert Watson #ifdef PF_COIP
228c74c7b73SRobert Watson 	PF_COIP
229c74c7b73SRobert Watson #else
230c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
231c74c7b73SRobert Watson #endif
232c74c7b73SRobert Watson 	},
233c74c7b73SRobert Watson 	{ BSM_PF_CNT,
234c74c7b73SRobert Watson #ifdef PF_CNT
235c74c7b73SRobert Watson 	PF_CNT
236c74c7b73SRobert Watson #else
237c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
238c74c7b73SRobert Watson #endif
239c74c7b73SRobert Watson 	},
240c74c7b73SRobert Watson 	{ BSM_PF_RTIP,
241c74c7b73SRobert Watson #ifdef PF_RTIP
242c74c7b73SRobert Watson 	PF_RTIP
243c74c7b73SRobert Watson #else
244c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
245c74c7b73SRobert Watson #endif
246c74c7b73SRobert Watson 	},
247c74c7b73SRobert Watson 	{ BSM_PF_SIP,
248c74c7b73SRobert Watson #ifdef PF_SIP
249c74c7b73SRobert Watson 	PF_SIP
250c74c7b73SRobert Watson #else
251c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
252c74c7b73SRobert Watson #endif
253c74c7b73SRobert Watson 	},
254c74c7b73SRobert Watson 	{ BSM_PF_PIP,
255c74c7b73SRobert Watson #ifdef PF_PIP
256c74c7b73SRobert Watson 	PF_PIP
257c74c7b73SRobert Watson #else
258c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
259c74c7b73SRobert Watson #endif
260c74c7b73SRobert Watson 	},
261c74c7b73SRobert Watson 	{ BSM_PF_ISDN,
262c74c7b73SRobert Watson #ifdef PF_ISDN
263c74c7b73SRobert Watson 	PF_ISDN
264c74c7b73SRobert Watson #else
265c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
266c74c7b73SRobert Watson #endif
267c74c7b73SRobert Watson 	},
268c74c7b73SRobert Watson 	{ BSM_PF_E164,
269c74c7b73SRobert Watson #ifdef PF_E164
270c74c7b73SRobert Watson 	PF_E164
271c74c7b73SRobert Watson #else
272c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
273c74c7b73SRobert Watson #endif
274c74c7b73SRobert Watson 	},
275c74c7b73SRobert Watson 	{ BSM_PF_NATM,
276c74c7b73SRobert Watson #ifdef PF_NATM
277c74c7b73SRobert Watson 	PF_NATM
278c74c7b73SRobert Watson #else
279c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
280c74c7b73SRobert Watson #endif
281c74c7b73SRobert Watson 	},
282c74c7b73SRobert Watson 	{ BSM_PF_ATM,
283c74c7b73SRobert Watson #ifdef PF_ATM
284c74c7b73SRobert Watson 	PF_ATM
285c74c7b73SRobert Watson #else
286c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
287c74c7b73SRobert Watson #endif
288c74c7b73SRobert Watson 	},
289c74c7b73SRobert Watson 	{ BSM_PF_NETGRAPH,
290c74c7b73SRobert Watson #ifdef PF_NETGRAPH
291c74c7b73SRobert Watson 	PF_NETGRAPH
292c74c7b73SRobert Watson #else
293c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
294c74c7b73SRobert Watson #endif
295c74c7b73SRobert Watson 	},
296c74c7b73SRobert Watson 	{ BSM_PF_SLOW,
297c74c7b73SRobert Watson #ifdef PF_SLOW
298c74c7b73SRobert Watson 	PF_SLOW
299c74c7b73SRobert Watson #else
300c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
301c74c7b73SRobert Watson #endif
302c74c7b73SRobert Watson 	},
303c74c7b73SRobert Watson 	{ BSM_PF_SCLUSTER,
304c74c7b73SRobert Watson #ifdef PF_SCLUSTER
305c74c7b73SRobert Watson 	PF_SCLUSTER
306c74c7b73SRobert Watson #else
307c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
308c74c7b73SRobert Watson #endif
309c74c7b73SRobert Watson 	},
310c74c7b73SRobert Watson 	{ BSM_PF_ARP,
311c74c7b73SRobert Watson #ifdef PF_ARP
312c74c7b73SRobert Watson 	PF_ARP
313c74c7b73SRobert Watson #else
314c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
315c74c7b73SRobert Watson #endif
316c74c7b73SRobert Watson 	},
317c74c7b73SRobert Watson 	{ BSM_PF_BLUETOOTH,
318c74c7b73SRobert Watson #ifdef PF_BLUETOOTH
319c74c7b73SRobert Watson 	PF_BLUETOOTH
320c74c7b73SRobert Watson #else
321c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
322c74c7b73SRobert Watson #endif
323c74c7b73SRobert Watson 	},
324c74c7b73SRobert Watson 	{ BSM_PF_IEEE80211,
325c74c7b73SRobert Watson #ifdef PF_IEEE80211
326c74c7b73SRobert Watson 	PF_IEEE80211
327c74c7b73SRobert Watson #else
328c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
329c74c7b73SRobert Watson #endif
330c74c7b73SRobert Watson 	},
331c74c7b73SRobert Watson 	{ BSM_PF_AX25,
332c74c7b73SRobert Watson #ifdef PF_AX25
333c74c7b73SRobert Watson 	PF_AX25
334c74c7b73SRobert Watson #else
335c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
336c74c7b73SRobert Watson #endif
337c74c7b73SRobert Watson 	},
338c74c7b73SRobert Watson 	{ BSM_PF_ROSE,
339c74c7b73SRobert Watson #ifdef PF_ROSE
340c74c7b73SRobert Watson 	PF_ROSE
341c74c7b73SRobert Watson #else
342c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
343c74c7b73SRobert Watson #endif
344c74c7b73SRobert Watson 	},
345c74c7b73SRobert Watson 	{ BSM_PF_NETBEUI,
346c74c7b73SRobert Watson #ifdef PF_NETBEUI
347c74c7b73SRobert Watson 	PF_NETBEUI
348c74c7b73SRobert Watson #else
349c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
350c74c7b73SRobert Watson #endif
351c74c7b73SRobert Watson 	},
352c74c7b73SRobert Watson 	{ BSM_PF_SECURITY,
353c74c7b73SRobert Watson #ifdef PF_SECURITY
354c74c7b73SRobert Watson 	PF_SECURITY
355c74c7b73SRobert Watson #else
356c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
357c74c7b73SRobert Watson #endif
358c74c7b73SRobert Watson 	},
359c74c7b73SRobert Watson 	{ BSM_PF_PACKET,
360c74c7b73SRobert Watson #ifdef PF_PACKET
361c74c7b73SRobert Watson 	PF_PACKET
362c74c7b73SRobert Watson #else
363c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
364c74c7b73SRobert Watson #endif
365c74c7b73SRobert Watson 	},
366c74c7b73SRobert Watson 	{ BSM_PF_ASH,
367c74c7b73SRobert Watson #ifdef PF_ASH
368c74c7b73SRobert Watson 	PF_ASH
369c74c7b73SRobert Watson #else
370c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
371c74c7b73SRobert Watson #endif
372c74c7b73SRobert Watson 	},
373c74c7b73SRobert Watson 	{ BSM_PF_ECONET,
374c74c7b73SRobert Watson #ifdef PF_ECONET
375c74c7b73SRobert Watson 	PF_ECONET
376c74c7b73SRobert Watson #else
377c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
378c74c7b73SRobert Watson #endif
379c74c7b73SRobert Watson 	},
380c74c7b73SRobert Watson 	{ BSM_PF_ATMSVC,
381c74c7b73SRobert Watson #ifdef PF_ATMSVC
382c74c7b73SRobert Watson 	PF_ATMSVC
383c74c7b73SRobert Watson #else
384c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
385c74c7b73SRobert Watson #endif
386c74c7b73SRobert Watson 	},
387c74c7b73SRobert Watson 	{ BSM_PF_IRDA,
388c74c7b73SRobert Watson #ifdef PF_IRDA
389c74c7b73SRobert Watson 	PF_IRDA
390c74c7b73SRobert Watson #else
391c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
392c74c7b73SRobert Watson #endif
393c74c7b73SRobert Watson 	},
394c74c7b73SRobert Watson 	{ BSM_PF_PPPOX,
395c74c7b73SRobert Watson #ifdef PF_PPPOX
396c74c7b73SRobert Watson 	PF_PPPOX
397c74c7b73SRobert Watson #else
398c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
399c74c7b73SRobert Watson #endif
400c74c7b73SRobert Watson 	},
401c74c7b73SRobert Watson 	{ BSM_PF_WANPIPE,
402c74c7b73SRobert Watson #ifdef PF_WANPIPE
403c74c7b73SRobert Watson 	PF_WANPIPE
404c74c7b73SRobert Watson #else
405c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
406c74c7b73SRobert Watson #endif
407c74c7b73SRobert Watson 	},
408c74c7b73SRobert Watson 	{ BSM_PF_LLC,
409c74c7b73SRobert Watson #ifdef PF_LLC
410c74c7b73SRobert Watson 	PF_LLC
411c74c7b73SRobert Watson #else
412c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
413c74c7b73SRobert Watson #endif
414c74c7b73SRobert Watson 	},
415c74c7b73SRobert Watson 	{ BSM_PF_CAN,
416c74c7b73SRobert Watson #ifdef PF_CAN
417c74c7b73SRobert Watson 	PF_CAN
418c74c7b73SRobert Watson #else
419c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
420c74c7b73SRobert Watson #endif
421c74c7b73SRobert Watson 	},
422c74c7b73SRobert Watson 	{ BSM_PF_TIPC,
423c74c7b73SRobert Watson #ifdef PF_TIPC
424c74c7b73SRobert Watson 	PF_TIPC
425c74c7b73SRobert Watson #else
426c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
427c74c7b73SRobert Watson #endif
428c74c7b73SRobert Watson 	},
429c74c7b73SRobert Watson 	{ BSM_PF_IUCV,
430c74c7b73SRobert Watson #ifdef PF_IUCV
431c74c7b73SRobert Watson 	PF_IUCV
432c74c7b73SRobert Watson #else
433c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
434c74c7b73SRobert Watson #endif
435c74c7b73SRobert Watson 	},
436c74c7b73SRobert Watson 	{ BSM_PF_RXRPC,
437c74c7b73SRobert Watson #ifdef PF_RXRPC
438c74c7b73SRobert Watson 	PF_RXRPC
439c74c7b73SRobert Watson #else
440c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
441c74c7b73SRobert Watson #endif
442c74c7b73SRobert Watson 	},
443c74c7b73SRobert Watson 	{ BSM_PF_PHONET,
444c74c7b73SRobert Watson #ifdef PF_PHONET
445c74c7b73SRobert Watson 	PF_PHONET
446c74c7b73SRobert Watson #else
447c74c7b73SRobert Watson 	PF_NO_LOCAL_MAPPING
448c74c7b73SRobert Watson #endif
449c74c7b73SRobert Watson 	},
450c74c7b73SRobert Watson };
451c74c7b73SRobert Watson static const int bsm_domains_count = sizeof(bsm_domains) /
452c74c7b73SRobert Watson 	    sizeof(bsm_domains[0]);
453c74c7b73SRobert Watson 
454c74c7b73SRobert Watson static const struct bsm_domain *
455c74c7b73SRobert Watson bsm_lookup_local_domain(int local_domain)
456c74c7b73SRobert Watson {
457c74c7b73SRobert Watson 	int i;
458c74c7b73SRobert Watson 
459c74c7b73SRobert Watson 	for (i = 0; i < bsm_domains_count; i++) {
460c74c7b73SRobert Watson 		if (bsm_domains[i].bd_local_domain == local_domain)
461c74c7b73SRobert Watson 			return (&bsm_domains[i]);
462c74c7b73SRobert Watson 	}
463c74c7b73SRobert Watson 	return (NULL);
464c74c7b73SRobert Watson }
465c74c7b73SRobert Watson 
466c74c7b73SRobert Watson u_short
467c74c7b73SRobert Watson au_domain_to_bsm(int local_domain)
468c74c7b73SRobert Watson {
469c74c7b73SRobert Watson 	const struct bsm_domain *bstp;
470c74c7b73SRobert Watson 
471c74c7b73SRobert Watson 	bstp = bsm_lookup_local_domain(local_domain);
472c74c7b73SRobert Watson 	if (bstp == NULL)
473c74c7b73SRobert Watson 		return (BSM_PF_UNKNOWN);
474c74c7b73SRobert Watson 	return (bstp->bd_bsm_domain);
475c74c7b73SRobert Watson }
476c74c7b73SRobert Watson 
477c74c7b73SRobert Watson static const struct bsm_domain *
478c74c7b73SRobert Watson bsm_lookup_bsm_domain(u_short bsm_domain)
479c74c7b73SRobert Watson {
480c74c7b73SRobert Watson 	int i;
481c74c7b73SRobert Watson 
482c74c7b73SRobert Watson 	for (i = 0; i < bsm_domains_count; i++) {
483c74c7b73SRobert Watson 		if (bsm_domains[i].bd_bsm_domain == bsm_domain)
484c74c7b73SRobert Watson 			return (&bsm_domains[i]);
485c74c7b73SRobert Watson 	}
486c74c7b73SRobert Watson 	return (NULL);
487c74c7b73SRobert Watson }
488c74c7b73SRobert Watson 
489c74c7b73SRobert Watson int
490c74c7b73SRobert Watson au_bsm_to_domain(u_short bsm_domain, int *local_domainp)
491c74c7b73SRobert Watson {
492c74c7b73SRobert Watson 	const struct bsm_domain *bstp;
493c74c7b73SRobert Watson 
494c74c7b73SRobert Watson 	bstp = bsm_lookup_bsm_domain(bsm_domain);
495c74c7b73SRobert Watson 	if (bstp == NULL || bstp->bd_local_domain)
496c74c7b73SRobert Watson 		return (-1);
497c74c7b73SRobert Watson 	*local_domainp = bstp->bd_local_domain;
498c74c7b73SRobert Watson 	return (0);
499c74c7b73SRobert Watson }
500