xref: /freebsd/sys/security/audit/bsm_domain.c (revision fdafd315)
16f1cbda7SRobert Watson /*-
251369649SPedro F. Giffuni  * SPDX-License-Identifier: BSD-3-Clause
351369649SPedro F. Giffuni  *
46f1cbda7SRobert Watson  * Copyright (c) 2008 Apple Inc.
56f1cbda7SRobert Watson  * All rights reserved.
66f1cbda7SRobert Watson  *
76f1cbda7SRobert Watson  * Redistribution and use in source and binary forms, with or without
86f1cbda7SRobert Watson  * modification, are permitted provided that the following conditions
96f1cbda7SRobert Watson  * are met:
106f1cbda7SRobert Watson  * 1.  Redistributions of source code must retain the above copyright
116f1cbda7SRobert Watson  *     notice, this list of conditions and the following disclaimer.
126f1cbda7SRobert Watson  * 2.  Redistributions in binary form must reproduce the above copyright
136f1cbda7SRobert Watson  *     notice, this list of conditions and the following disclaimer in the
146f1cbda7SRobert Watson  *     documentation and/or other materials provided with the distribution.
156f1cbda7SRobert Watson  * 3.  Neither the name of Apple Inc. ("Apple") nor the names of
166f1cbda7SRobert Watson  *     its contributors may be used to endorse or promote products derived
176f1cbda7SRobert Watson  *     from this software without specific prior written permission.
186f1cbda7SRobert Watson  *
196f1cbda7SRobert Watson  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND
206f1cbda7SRobert Watson  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
216f1cbda7SRobert Watson  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
226f1cbda7SRobert Watson  * ARE DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR
236f1cbda7SRobert Watson  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
246f1cbda7SRobert Watson  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
256f1cbda7SRobert Watson  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
266f1cbda7SRobert Watson  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
276f1cbda7SRobert Watson  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
286f1cbda7SRobert Watson  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
296f1cbda7SRobert Watson  * POSSIBILITY OF SUCH DAMAGE.
306f1cbda7SRobert Watson  */
316f1cbda7SRobert Watson 
326f1cbda7SRobert Watson #include <sys/param.h>
336f1cbda7SRobert Watson #include <sys/socket.h>
346f1cbda7SRobert Watson 
356f1cbda7SRobert Watson #include <security/audit/audit.h>
366f1cbda7SRobert Watson 
376f1cbda7SRobert Watson #include <bsm/audit_domain.h>
386f1cbda7SRobert Watson #include <bsm/audit_record.h>
396f1cbda7SRobert Watson 
406f1cbda7SRobert Watson struct bsm_domain {
416f1cbda7SRobert Watson 	u_short	bd_bsm_domain;
426f1cbda7SRobert Watson 	int	bd_local_domain;
436f1cbda7SRobert Watson };
446f1cbda7SRobert Watson 
456f1cbda7SRobert Watson #define	PF_NO_LOCAL_MAPPING	-600
466f1cbda7SRobert Watson 
476f1cbda7SRobert Watson static const struct bsm_domain bsm_domains[] = {
486f1cbda7SRobert Watson 	{ BSM_PF_UNSPEC, PF_UNSPEC },
496f1cbda7SRobert Watson 	{ BSM_PF_LOCAL, PF_LOCAL },
506f1cbda7SRobert Watson 	{ BSM_PF_INET, PF_INET },
516f1cbda7SRobert Watson 	{ BSM_PF_IMPLINK,
526f1cbda7SRobert Watson #ifdef PF_IMPLINK
536f1cbda7SRobert Watson 	PF_IMPLINK
546f1cbda7SRobert Watson #else
556f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
566f1cbda7SRobert Watson #endif
576f1cbda7SRobert Watson 	},
586f1cbda7SRobert Watson 	{ BSM_PF_PUP,
596f1cbda7SRobert Watson #ifdef PF_PUP
606f1cbda7SRobert Watson 	PF_PUP
616f1cbda7SRobert Watson #else
626f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
636f1cbda7SRobert Watson #endif
646f1cbda7SRobert Watson 	},
656f1cbda7SRobert Watson 	{ BSM_PF_CHAOS,
666f1cbda7SRobert Watson #ifdef PF_CHAOS
676f1cbda7SRobert Watson 	PF_CHAOS
686f1cbda7SRobert Watson #else
696f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
706f1cbda7SRobert Watson #endif
716f1cbda7SRobert Watson 	},
726f1cbda7SRobert Watson 	{ BSM_PF_NS,
736f1cbda7SRobert Watson #ifdef PF_NS
746f1cbda7SRobert Watson 	PF_NS
756f1cbda7SRobert Watson #else
766f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
776f1cbda7SRobert Watson #endif
786f1cbda7SRobert Watson 	},
796f1cbda7SRobert Watson 	{ BSM_PF_NBS,
806f1cbda7SRobert Watson #ifdef PF_NBS
816f1cbda7SRobert Watson 	PF_NBS
826f1cbda7SRobert Watson #else
836f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
846f1cbda7SRobert Watson #endif
856f1cbda7SRobert Watson 	},
866f1cbda7SRobert Watson 	{ BSM_PF_ECMA,
876f1cbda7SRobert Watson #ifdef PF_ECMA
886f1cbda7SRobert Watson 	PF_ECMA
896f1cbda7SRobert Watson #else
906f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
916f1cbda7SRobert Watson #endif
926f1cbda7SRobert Watson 	},
936f1cbda7SRobert Watson 	{ BSM_PF_DATAKIT,
946f1cbda7SRobert Watson #ifdef PF_DATAKIT
956f1cbda7SRobert Watson 	PF_DATAKIT
966f1cbda7SRobert Watson #else
976f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
986f1cbda7SRobert Watson #endif
996f1cbda7SRobert Watson 	},
1006f1cbda7SRobert Watson 	{ BSM_PF_CCITT,
1016f1cbda7SRobert Watson #ifdef PF_CCITT
1026f1cbda7SRobert Watson 	PF_CCITT
1036f1cbda7SRobert Watson #else
1046f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
1056f1cbda7SRobert Watson #endif
1066f1cbda7SRobert Watson 	},
1076f1cbda7SRobert Watson 	{ BSM_PF_SNA, PF_SNA },
1086f1cbda7SRobert Watson 	{ BSM_PF_DECnet, PF_DECnet },
1096f1cbda7SRobert Watson 	{ BSM_PF_DLI,
1106f1cbda7SRobert Watson #ifdef PF_DLI
1116f1cbda7SRobert Watson 	PF_DLI
1126f1cbda7SRobert Watson #else
1136f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
1146f1cbda7SRobert Watson #endif
1156f1cbda7SRobert Watson 	},
1166f1cbda7SRobert Watson 	{ BSM_PF_LAT,
1176f1cbda7SRobert Watson #ifdef PF_LAT
1186f1cbda7SRobert Watson 	PF_LAT
1196f1cbda7SRobert Watson #else
1206f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
1216f1cbda7SRobert Watson #endif
1226f1cbda7SRobert Watson 	},
1236f1cbda7SRobert Watson 	{ BSM_PF_HYLINK,
1246f1cbda7SRobert Watson #ifdef PF_HYLINK
1256f1cbda7SRobert Watson 	PF_HYLINK
1266f1cbda7SRobert Watson #else
1276f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
1286f1cbda7SRobert Watson #endif
1296f1cbda7SRobert Watson 	},
1306f1cbda7SRobert Watson 	{ BSM_PF_APPLETALK, PF_APPLETALK },
1316f1cbda7SRobert Watson 	{ BSM_PF_NIT,
1326f1cbda7SRobert Watson #ifdef PF_NIT
1336f1cbda7SRobert Watson 	PF_NIT
1346f1cbda7SRobert Watson #else
1356f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
1366f1cbda7SRobert Watson #endif
1376f1cbda7SRobert Watson 	},
1386f1cbda7SRobert Watson 	{ BSM_PF_802,
1396f1cbda7SRobert Watson #ifdef PF_802
1406f1cbda7SRobert Watson 	PF_802
1416f1cbda7SRobert Watson #else
1426f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
1436f1cbda7SRobert Watson #endif
1446f1cbda7SRobert Watson 	},
1456f1cbda7SRobert Watson 	{ BSM_PF_OSI,
1466f1cbda7SRobert Watson #ifdef PF_OSI
1476f1cbda7SRobert Watson 	PF_OSI
1486f1cbda7SRobert Watson #else
1496f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
1506f1cbda7SRobert Watson #endif
1516f1cbda7SRobert Watson 	},
1526f1cbda7SRobert Watson 	{ BSM_PF_X25,
1536f1cbda7SRobert Watson #ifdef PF_X25
1546f1cbda7SRobert Watson 	PF_X25
1556f1cbda7SRobert Watson #else
1566f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
1576f1cbda7SRobert Watson #endif
1586f1cbda7SRobert Watson 	},
1596f1cbda7SRobert Watson 	{ BSM_PF_OSINET,
1606f1cbda7SRobert Watson #ifdef PF_OSINET
1616f1cbda7SRobert Watson 	PF_OSINET
1626f1cbda7SRobert Watson #else
1636f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
1646f1cbda7SRobert Watson #endif
1656f1cbda7SRobert Watson 	},
1666f1cbda7SRobert Watson 	{ BSM_PF_GOSIP,
1676f1cbda7SRobert Watson #ifdef PF_GOSIP
1686f1cbda7SRobert Watson 	PF_GOSIP
1696f1cbda7SRobert Watson #else
1706f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
1716f1cbda7SRobert Watson #endif
1726f1cbda7SRobert Watson 	},
1736f1cbda7SRobert Watson 	{ BSM_PF_IPX, PF_IPX },
1746f1cbda7SRobert Watson 	{ BSM_PF_ROUTE, PF_ROUTE },
1756f1cbda7SRobert Watson 	{ BSM_PF_LINK,
1766f1cbda7SRobert Watson #ifdef PF_LINK
1776f1cbda7SRobert Watson 	PF_LINK
1786f1cbda7SRobert Watson #else
1796f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
1806f1cbda7SRobert Watson #endif
1816f1cbda7SRobert Watson 	},
1826f1cbda7SRobert Watson 	{ BSM_PF_INET6, PF_INET6 },
1836f1cbda7SRobert Watson 	{ BSM_PF_KEY, PF_KEY },
1846f1cbda7SRobert Watson 	{ BSM_PF_NCA,
1856f1cbda7SRobert Watson #ifdef PF_NCA
1866f1cbda7SRobert Watson 	PF_NCA
1876f1cbda7SRobert Watson #else
1886f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
1896f1cbda7SRobert Watson #endif
1906f1cbda7SRobert Watson 	},
1916f1cbda7SRobert Watson 	{ BSM_PF_POLICY,
1926f1cbda7SRobert Watson #ifdef PF_POLICY
1936f1cbda7SRobert Watson 	PF_POLICY
1946f1cbda7SRobert Watson #else
1956f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
1966f1cbda7SRobert Watson #endif
1976f1cbda7SRobert Watson 	},
1986f1cbda7SRobert Watson 	{ BSM_PF_INET_OFFLOAD,
1996f1cbda7SRobert Watson #ifdef PF_INET_OFFLOAD
2006f1cbda7SRobert Watson 	PF_INET_OFFLOAD
2016f1cbda7SRobert Watson #else
2026f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
2036f1cbda7SRobert Watson #endif
2046f1cbda7SRobert Watson 	},
2056f1cbda7SRobert Watson 	{ BSM_PF_NETBIOS,
2066f1cbda7SRobert Watson #ifdef PF_NETBIOS
2076f1cbda7SRobert Watson 	PF_NETBIOS
2086f1cbda7SRobert Watson #else
2096f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
2106f1cbda7SRobert Watson #endif
2116f1cbda7SRobert Watson 	},
2126f1cbda7SRobert Watson 	{ BSM_PF_ISO,
2136f1cbda7SRobert Watson #ifdef PF_ISO
2146f1cbda7SRobert Watson 	PF_ISO
2156f1cbda7SRobert Watson #else
2166f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
2176f1cbda7SRobert Watson #endif
2186f1cbda7SRobert Watson 	},
2196f1cbda7SRobert Watson 	{ BSM_PF_XTP,
2206f1cbda7SRobert Watson #ifdef PF_XTP
2216f1cbda7SRobert Watson 	PF_XTP
2226f1cbda7SRobert Watson #else
2236f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
2246f1cbda7SRobert Watson #endif
2256f1cbda7SRobert Watson 	},
2266f1cbda7SRobert Watson 	{ BSM_PF_COIP,
2276f1cbda7SRobert Watson #ifdef PF_COIP
2286f1cbda7SRobert Watson 	PF_COIP
2296f1cbda7SRobert Watson #else
2306f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
2316f1cbda7SRobert Watson #endif
2326f1cbda7SRobert Watson 	},
2336f1cbda7SRobert Watson 	{ BSM_PF_CNT,
2346f1cbda7SRobert Watson #ifdef PF_CNT
2356f1cbda7SRobert Watson 	PF_CNT
2366f1cbda7SRobert Watson #else
2376f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
2386f1cbda7SRobert Watson #endif
2396f1cbda7SRobert Watson 	},
2406f1cbda7SRobert Watson 	{ BSM_PF_RTIP,
2416f1cbda7SRobert Watson #ifdef PF_RTIP
2426f1cbda7SRobert Watson 	PF_RTIP
2436f1cbda7SRobert Watson #else
2446f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
2456f1cbda7SRobert Watson #endif
2466f1cbda7SRobert Watson 	},
2476f1cbda7SRobert Watson 	{ BSM_PF_SIP,
2486f1cbda7SRobert Watson #ifdef PF_SIP
2496f1cbda7SRobert Watson 	PF_SIP
2506f1cbda7SRobert Watson #else
2516f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
2526f1cbda7SRobert Watson #endif
2536f1cbda7SRobert Watson 	},
2546f1cbda7SRobert Watson 	{ BSM_PF_PIP,
2556f1cbda7SRobert Watson #ifdef PF_PIP
2566f1cbda7SRobert Watson 	PF_PIP
2576f1cbda7SRobert Watson #else
2586f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
2596f1cbda7SRobert Watson #endif
2606f1cbda7SRobert Watson 	},
2616f1cbda7SRobert Watson 	{ BSM_PF_ISDN,
2626f1cbda7SRobert Watson #ifdef PF_ISDN
2636f1cbda7SRobert Watson 	PF_ISDN
2646f1cbda7SRobert Watson #else
2656f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
2666f1cbda7SRobert Watson #endif
2676f1cbda7SRobert Watson 	},
2686f1cbda7SRobert Watson 	{ BSM_PF_E164,
2696f1cbda7SRobert Watson #ifdef PF_E164
2706f1cbda7SRobert Watson 	PF_E164
2716f1cbda7SRobert Watson #else
2726f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
2736f1cbda7SRobert Watson #endif
2746f1cbda7SRobert Watson 	},
2756f1cbda7SRobert Watson 	{ BSM_PF_NATM,
2766f1cbda7SRobert Watson #ifdef PF_NATM
2776f1cbda7SRobert Watson 	PF_NATM
2786f1cbda7SRobert Watson #else
2796f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
2806f1cbda7SRobert Watson #endif
2816f1cbda7SRobert Watson 	},
2826f1cbda7SRobert Watson 	{ BSM_PF_ATM,
2836f1cbda7SRobert Watson #ifdef PF_ATM
2846f1cbda7SRobert Watson 	PF_ATM
2856f1cbda7SRobert Watson #else
2866f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
2876f1cbda7SRobert Watson #endif
2886f1cbda7SRobert Watson 	},
2896f1cbda7SRobert Watson 	{ BSM_PF_NETGRAPH,
2906f1cbda7SRobert Watson #ifdef PF_NETGRAPH
2916f1cbda7SRobert Watson 	PF_NETGRAPH
2926f1cbda7SRobert Watson #else
2936f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
2946f1cbda7SRobert Watson #endif
2956f1cbda7SRobert Watson 	},
2966f1cbda7SRobert Watson 	{ BSM_PF_SLOW,
2976f1cbda7SRobert Watson #ifdef PF_SLOW
2986f1cbda7SRobert Watson 	PF_SLOW
2996f1cbda7SRobert Watson #else
3006f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
3016f1cbda7SRobert Watson #endif
3026f1cbda7SRobert Watson 	},
3036f1cbda7SRobert Watson 	{ BSM_PF_SCLUSTER,
3046f1cbda7SRobert Watson #ifdef PF_SCLUSTER
3056f1cbda7SRobert Watson 	PF_SCLUSTER
3066f1cbda7SRobert Watson #else
3076f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
3086f1cbda7SRobert Watson #endif
3096f1cbda7SRobert Watson 	},
3106f1cbda7SRobert Watson 	{ BSM_PF_ARP,
3116f1cbda7SRobert Watson #ifdef PF_ARP
3126f1cbda7SRobert Watson 	PF_ARP
3136f1cbda7SRobert Watson #else
3146f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
3156f1cbda7SRobert Watson #endif
3166f1cbda7SRobert Watson 	},
3176f1cbda7SRobert Watson 	{ BSM_PF_BLUETOOTH,
3186f1cbda7SRobert Watson #ifdef PF_BLUETOOTH
3196f1cbda7SRobert Watson 	PF_BLUETOOTH
3206f1cbda7SRobert Watson #else
3216f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
3226f1cbda7SRobert Watson #endif
3236f1cbda7SRobert Watson 	},
3246f1cbda7SRobert Watson 	{ BSM_PF_AX25,
3256f1cbda7SRobert Watson #ifdef PF_AX25
3266f1cbda7SRobert Watson 	PF_AX25
3276f1cbda7SRobert Watson #else
3286f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
3296f1cbda7SRobert Watson #endif
3306f1cbda7SRobert Watson 	},
3316f1cbda7SRobert Watson 	{ BSM_PF_ROSE,
3326f1cbda7SRobert Watson #ifdef PF_ROSE
3336f1cbda7SRobert Watson 	PF_ROSE
3346f1cbda7SRobert Watson #else
3356f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
3366f1cbda7SRobert Watson #endif
3376f1cbda7SRobert Watson 	},
3386f1cbda7SRobert Watson 	{ BSM_PF_NETBEUI,
3396f1cbda7SRobert Watson #ifdef PF_NETBEUI
3406f1cbda7SRobert Watson 	PF_NETBEUI
3416f1cbda7SRobert Watson #else
3426f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
3436f1cbda7SRobert Watson #endif
3446f1cbda7SRobert Watson 	},
3456f1cbda7SRobert Watson 	{ BSM_PF_SECURITY,
3466f1cbda7SRobert Watson #ifdef PF_SECURITY
3476f1cbda7SRobert Watson 	PF_SECURITY
3486f1cbda7SRobert Watson #else
3496f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
3506f1cbda7SRobert Watson #endif
3516f1cbda7SRobert Watson 	},
3526f1cbda7SRobert Watson 	{ BSM_PF_PACKET,
3536f1cbda7SRobert Watson #ifdef PF_PACKET
3546f1cbda7SRobert Watson 	PF_PACKET
3556f1cbda7SRobert Watson #else
3566f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
3576f1cbda7SRobert Watson #endif
3586f1cbda7SRobert Watson 	},
3596f1cbda7SRobert Watson 	{ BSM_PF_ASH,
3606f1cbda7SRobert Watson #ifdef PF_ASH
3616f1cbda7SRobert Watson 	PF_ASH
3626f1cbda7SRobert Watson #else
3636f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
3646f1cbda7SRobert Watson #endif
3656f1cbda7SRobert Watson 	},
3666f1cbda7SRobert Watson 	{ BSM_PF_ECONET,
3676f1cbda7SRobert Watson #ifdef PF_ECONET
3686f1cbda7SRobert Watson 	PF_ECONET
3696f1cbda7SRobert Watson #else
3706f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
3716f1cbda7SRobert Watson #endif
3726f1cbda7SRobert Watson 	},
3736f1cbda7SRobert Watson 	{ BSM_PF_ATMSVC,
3746f1cbda7SRobert Watson #ifdef PF_ATMSVC
3756f1cbda7SRobert Watson 	PF_ATMSVC
3766f1cbda7SRobert Watson #else
3776f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
3786f1cbda7SRobert Watson #endif
3796f1cbda7SRobert Watson 	},
3806f1cbda7SRobert Watson 	{ BSM_PF_IRDA,
3816f1cbda7SRobert Watson #ifdef PF_IRDA
3826f1cbda7SRobert Watson 	PF_IRDA
3836f1cbda7SRobert Watson #else
3846f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
3856f1cbda7SRobert Watson #endif
3866f1cbda7SRobert Watson 	},
3876f1cbda7SRobert Watson 	{ BSM_PF_PPPOX,
3886f1cbda7SRobert Watson #ifdef PF_PPPOX
3896f1cbda7SRobert Watson 	PF_PPPOX
3906f1cbda7SRobert Watson #else
3916f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
3926f1cbda7SRobert Watson #endif
3936f1cbda7SRobert Watson 	},
3946f1cbda7SRobert Watson 	{ BSM_PF_WANPIPE,
3956f1cbda7SRobert Watson #ifdef PF_WANPIPE
3966f1cbda7SRobert Watson 	PF_WANPIPE
3976f1cbda7SRobert Watson #else
3986f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
3996f1cbda7SRobert Watson #endif
4006f1cbda7SRobert Watson 	},
4016f1cbda7SRobert Watson 	{ BSM_PF_LLC,
4026f1cbda7SRobert Watson #ifdef PF_LLC
4036f1cbda7SRobert Watson 	PF_LLC
4046f1cbda7SRobert Watson #else
4056f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
4066f1cbda7SRobert Watson #endif
4076f1cbda7SRobert Watson 	},
4086f1cbda7SRobert Watson 	{ BSM_PF_CAN,
4096f1cbda7SRobert Watson #ifdef PF_CAN
4106f1cbda7SRobert Watson 	PF_CAN
4116f1cbda7SRobert Watson #else
4126f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
4136f1cbda7SRobert Watson #endif
4146f1cbda7SRobert Watson 	},
4156f1cbda7SRobert Watson 	{ BSM_PF_TIPC,
4166f1cbda7SRobert Watson #ifdef PF_TIPC
4176f1cbda7SRobert Watson 	PF_TIPC
4186f1cbda7SRobert Watson #else
4196f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
4206f1cbda7SRobert Watson #endif
4216f1cbda7SRobert Watson 	},
4226f1cbda7SRobert Watson 	{ BSM_PF_IUCV,
4236f1cbda7SRobert Watson #ifdef PF_IUCV
4246f1cbda7SRobert Watson 	PF_IUCV
4256f1cbda7SRobert Watson #else
4266f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
4276f1cbda7SRobert Watson #endif
4286f1cbda7SRobert Watson 	},
4296f1cbda7SRobert Watson 	{ BSM_PF_RXRPC,
4306f1cbda7SRobert Watson #ifdef PF_RXRPC
4316f1cbda7SRobert Watson 	PF_RXRPC
4326f1cbda7SRobert Watson #else
4336f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
4346f1cbda7SRobert Watson #endif
4356f1cbda7SRobert Watson 	},
4366f1cbda7SRobert Watson 	{ BSM_PF_PHONET,
4376f1cbda7SRobert Watson #ifdef PF_PHONET
4386f1cbda7SRobert Watson 	PF_PHONET
4396f1cbda7SRobert Watson #else
4406f1cbda7SRobert Watson 	PF_NO_LOCAL_MAPPING
4416f1cbda7SRobert Watson #endif
4426f1cbda7SRobert Watson 	},
4436f1cbda7SRobert Watson };
4446f1cbda7SRobert Watson static const int bsm_domains_count = sizeof(bsm_domains) /
4456f1cbda7SRobert Watson 	    sizeof(bsm_domains[0]);
4466f1cbda7SRobert Watson 
4476f1cbda7SRobert Watson static const struct bsm_domain *
bsm_lookup_local_domain(int local_domain)4486f1cbda7SRobert Watson bsm_lookup_local_domain(int local_domain)
4496f1cbda7SRobert Watson {
4506f1cbda7SRobert Watson 	int i;
4516f1cbda7SRobert Watson 
4526f1cbda7SRobert Watson 	for (i = 0; i < bsm_domains_count; i++) {
4536f1cbda7SRobert Watson 		if (bsm_domains[i].bd_local_domain == local_domain)
4546f1cbda7SRobert Watson 			return (&bsm_domains[i]);
4556f1cbda7SRobert Watson 	}
4566f1cbda7SRobert Watson 	return (NULL);
4576f1cbda7SRobert Watson }
4586f1cbda7SRobert Watson 
4596f1cbda7SRobert Watson u_short
au_domain_to_bsm(int local_domain)4606f1cbda7SRobert Watson au_domain_to_bsm(int local_domain)
4616f1cbda7SRobert Watson {
4626f1cbda7SRobert Watson 	const struct bsm_domain *bstp;
4636f1cbda7SRobert Watson 
4646f1cbda7SRobert Watson 	bstp = bsm_lookup_local_domain(local_domain);
4656f1cbda7SRobert Watson 	if (bstp == NULL)
4666f1cbda7SRobert Watson 		return (BSM_PF_UNKNOWN);
4676f1cbda7SRobert Watson 	return (bstp->bd_bsm_domain);
4686f1cbda7SRobert Watson }
4696f1cbda7SRobert Watson 
4706f1cbda7SRobert Watson static const struct bsm_domain *
bsm_lookup_bsm_domain(u_short bsm_domain)4716f1cbda7SRobert Watson bsm_lookup_bsm_domain(u_short bsm_domain)
4726f1cbda7SRobert Watson {
4736f1cbda7SRobert Watson 	int i;
4746f1cbda7SRobert Watson 
4756f1cbda7SRobert Watson 	for (i = 0; i < bsm_domains_count; i++) {
4766f1cbda7SRobert Watson 		if (bsm_domains[i].bd_bsm_domain == bsm_domain)
4776f1cbda7SRobert Watson 			return (&bsm_domains[i]);
4786f1cbda7SRobert Watson 	}
4796f1cbda7SRobert Watson 	return (NULL);
4806f1cbda7SRobert Watson }
4816f1cbda7SRobert Watson 
4826f1cbda7SRobert Watson int
au_bsm_to_domain(u_short bsm_domain,int * local_domainp)4836f1cbda7SRobert Watson au_bsm_to_domain(u_short bsm_domain, int *local_domainp)
4846f1cbda7SRobert Watson {
4856f1cbda7SRobert Watson 	const struct bsm_domain *bstp;
4866f1cbda7SRobert Watson 
4876f1cbda7SRobert Watson 	bstp = bsm_lookup_bsm_domain(bsm_domain);
4886f1cbda7SRobert Watson 	if (bstp == NULL || bstp->bd_local_domain)
4896f1cbda7SRobert Watson 		return (-1);
4906f1cbda7SRobert Watson 	*local_domainp = bstp->bd_local_domain;
4916f1cbda7SRobert Watson 	return (0);
4926f1cbda7SRobert Watson }
493