19289f547SJohn Baldwin /* 29289f547SJohn Baldwin * Copyright (c) 2006 "David Kirchner" <[email protected]>. All rights reserved. 39289f547SJohn Baldwin * 49289f547SJohn Baldwin * Redistribution and use in source and binary forms, with or without 59289f547SJohn Baldwin * modification, are permitted provided that the following conditions 69289f547SJohn Baldwin * are met: 79289f547SJohn Baldwin * 1. Redistributions of source code must retain the above copyright 89289f547SJohn Baldwin * notice, this list of conditions and the following disclaimer. 99289f547SJohn Baldwin * 2. Redistributions in binary form must reproduce the above copyright 109289f547SJohn Baldwin * notice, this list of conditions and the following disclaimer in the 119289f547SJohn Baldwin * documentation and/or other materials provided with the distribution. 129289f547SJohn Baldwin * 139289f547SJohn Baldwin * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 149289f547SJohn Baldwin * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 159289f547SJohn Baldwin * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 169289f547SJohn Baldwin * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 179289f547SJohn Baldwin * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 189289f547SJohn Baldwin * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 199289f547SJohn Baldwin * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 209289f547SJohn Baldwin * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 219289f547SJohn Baldwin * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 229289f547SJohn Baldwin * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 239289f547SJohn Baldwin * SUCH DAMAGE. 249289f547SJohn Baldwin */ 259289f547SJohn Baldwin 269289f547SJohn Baldwin #include <sys/cdefs.h> 279289f547SJohn Baldwin __FBSDID("$FreeBSD$"); 289289f547SJohn Baldwin 299289f547SJohn Baldwin #define L2CAP_SOCKET_CHECKED 309289f547SJohn Baldwin 319289f547SJohn Baldwin #include <sys/types.h> 329289f547SJohn Baldwin #include <sys/acl.h> 339289f547SJohn Baldwin #include <sys/capsicum.h> 34ffb66079SJohn Baldwin #include <sys/event.h> 359289f547SJohn Baldwin #include <sys/extattr.h> 369289f547SJohn Baldwin #include <sys/linker.h> 379289f547SJohn Baldwin #include <sys/mman.h> 389289f547SJohn Baldwin #include <sys/mount.h> 399289f547SJohn Baldwin #include <sys/procctl.h> 409289f547SJohn Baldwin #include <sys/ptrace.h> 419289f547SJohn Baldwin #include <sys/reboot.h> 429289f547SJohn Baldwin #include <sys/resource.h> 439289f547SJohn Baldwin #include <sys/rtprio.h> 449289f547SJohn Baldwin #include <sys/sem.h> 459289f547SJohn Baldwin #include <sys/shm.h> 469289f547SJohn Baldwin #include <sys/socket.h> 479289f547SJohn Baldwin #include <sys/stat.h> 489289f547SJohn Baldwin #include <sys/thr.h> 499289f547SJohn Baldwin #include <sys/umtx.h> 5039a3a438SJohn Baldwin #include <machine/sysarch.h> 519289f547SJohn Baldwin #include <netinet/in.h> 52472e8009SMichael Tuexen #include <netinet/sctp.h> 539289f547SJohn Baldwin #include <netinet/tcp.h> 549289f547SJohn Baldwin #include <netinet/udp.h> 55ed466c34SMichael Tuexen #include <netinet/udplite.h> 569289f547SJohn Baldwin #include <nfsserver/nfs.h> 579289f547SJohn Baldwin #include <ufs/ufs/quota.h> 58aa9bddf0SSteven Hartland #include <vm/vm.h> 599289f547SJohn Baldwin #include <vm/vm_param.h> 609289f547SJohn Baldwin #include <aio.h> 619289f547SJohn Baldwin #include <fcntl.h> 629289f547SJohn Baldwin #include <sched.h> 639289f547SJohn Baldwin #include <stdbool.h> 649289f547SJohn Baldwin #include <stdio.h> 659289f547SJohn Baldwin #include <stdlib.h> 669289f547SJohn Baldwin #include <strings.h> 679289f547SJohn Baldwin #include <sysdecode.h> 689289f547SJohn Baldwin #include <unistd.h> 699289f547SJohn Baldwin #include <sys/bitstring.h> 709289f547SJohn Baldwin #include <netgraph/bluetooth/include/ng_hci.h> 719289f547SJohn Baldwin #include <netgraph/bluetooth/include/ng_l2cap.h> 729289f547SJohn Baldwin #include <netgraph/bluetooth/include/ng_btsocket.h> 739289f547SJohn Baldwin 749289f547SJohn Baldwin /* 759289f547SJohn Baldwin * This is taken from the xlat tables originally in truss which were 769289f547SJohn Baldwin * in turn taken from strace. 779289f547SJohn Baldwin */ 789289f547SJohn Baldwin struct name_table { 799289f547SJohn Baldwin uintmax_t val; 809289f547SJohn Baldwin const char *str; 819289f547SJohn Baldwin }; 829289f547SJohn Baldwin 839289f547SJohn Baldwin #define X(a) { a, #a }, 849289f547SJohn Baldwin #define XEND { 0, NULL } 859289f547SJohn Baldwin 869289f547SJohn Baldwin #define TABLE_START(n) static struct name_table n[] = { 879289f547SJohn Baldwin #define TABLE_ENTRY X 889289f547SJohn Baldwin #define TABLE_END XEND }; 899289f547SJohn Baldwin 909289f547SJohn Baldwin #include "tables.h" 919289f547SJohn Baldwin 929289f547SJohn Baldwin #undef TABLE_START 939289f547SJohn Baldwin #undef TABLE_ENTRY 949289f547SJohn Baldwin #undef TABLE_END 959289f547SJohn Baldwin 969289f547SJohn Baldwin /* 979289f547SJohn Baldwin * These are simple support macros. print_or utilizes a variable 989289f547SJohn Baldwin * defined in the calling function to track whether or not it should 999289f547SJohn Baldwin * print a logical-OR character ('|') before a string. if_print_or 1009289f547SJohn Baldwin * simply handles the necessary "if" statement used in many lines 1019289f547SJohn Baldwin * of this file. 1029289f547SJohn Baldwin */ 1039289f547SJohn Baldwin #define print_or(fp,str,orflag) do { \ 1049289f547SJohn Baldwin if (orflag) fputc(fp, '|'); else orflag = true; \ 1059289f547SJohn Baldwin fprintf(fp, str); } \ 1069289f547SJohn Baldwin while (0) 1079289f547SJohn Baldwin #define if_print_or(fp,i,flag,orflag) do { \ 1089289f547SJohn Baldwin if ((i & flag) == flag) \ 1099289f547SJohn Baldwin print_or(fp,#flag,orflag); } \ 1109289f547SJohn Baldwin while (0) 1119289f547SJohn Baldwin 1129289f547SJohn Baldwin static const char * 1139289f547SJohn Baldwin lookup_value(struct name_table *table, uintmax_t val) 1149289f547SJohn Baldwin { 1159289f547SJohn Baldwin 1169289f547SJohn Baldwin for (; table->str != NULL; table++) 1179289f547SJohn Baldwin if (table->val == val) 1189289f547SJohn Baldwin return (table->str); 1199289f547SJohn Baldwin return (NULL); 1209289f547SJohn Baldwin } 1219289f547SJohn Baldwin 1229289f547SJohn Baldwin /* 1239289f547SJohn Baldwin * Used when the value maps to a bitmask of #definition values in the 1249289f547SJohn Baldwin * table. This is a helper routine which outputs a symbolic mask of 1259289f547SJohn Baldwin * matched masks. Multiple masks are separated by a pipe ('|'). 1269289f547SJohn Baldwin * The value is modified on return to only hold unmatched bits. 1279289f547SJohn Baldwin */ 1289289f547SJohn Baldwin static void 1299289f547SJohn Baldwin print_mask_part(FILE *fp, struct name_table *table, uintmax_t *valp, 1309289f547SJohn Baldwin bool *printed) 1319289f547SJohn Baldwin { 1329289f547SJohn Baldwin uintmax_t rem; 1339289f547SJohn Baldwin 1349289f547SJohn Baldwin rem = *valp; 1359289f547SJohn Baldwin for (; table->str != NULL; table++) { 1369289f547SJohn Baldwin if ((table->val & rem) == table->val) { 1379289f547SJohn Baldwin /* 1389289f547SJohn Baldwin * Only print a zero mask if the raw value is 1399289f547SJohn Baldwin * zero. 1409289f547SJohn Baldwin */ 1419289f547SJohn Baldwin if (table->val == 0 && *valp != 0) 1429289f547SJohn Baldwin continue; 1439289f547SJohn Baldwin fprintf(fp, "%s%s", *printed ? "|" : "", table->str); 1449289f547SJohn Baldwin *printed = true; 1459289f547SJohn Baldwin rem &= ~table->val; 1469289f547SJohn Baldwin } 1479289f547SJohn Baldwin } 1489289f547SJohn Baldwin 1499289f547SJohn Baldwin *valp = rem; 1509289f547SJohn Baldwin } 1519289f547SJohn Baldwin 1529289f547SJohn Baldwin /* 1539289f547SJohn Baldwin * Used when the value maps to a bitmask of #definition values in the 1549289f547SJohn Baldwin * table. The return value is true if something was printed. If 1559289f547SJohn Baldwin * rem is not NULL, *rem holds any bits not decoded if something was 1569289f547SJohn Baldwin * printed. If nothing was printed and rem is not NULL, *rem holds 1579289f547SJohn Baldwin * the original value. 1589289f547SJohn Baldwin */ 1599289f547SJohn Baldwin static bool 1609289f547SJohn Baldwin print_mask_int(FILE *fp, struct name_table *table, int ival, int *rem) 1619289f547SJohn Baldwin { 1629289f547SJohn Baldwin uintmax_t val; 1639289f547SJohn Baldwin bool printed; 1649289f547SJohn Baldwin 1659289f547SJohn Baldwin printed = false; 1669289f547SJohn Baldwin val = (unsigned)ival; 1679289f547SJohn Baldwin print_mask_part(fp, table, &val, &printed); 1689289f547SJohn Baldwin if (rem != NULL) 1699289f547SJohn Baldwin *rem = val; 1709289f547SJohn Baldwin return (printed); 1719289f547SJohn Baldwin } 1729289f547SJohn Baldwin 1739289f547SJohn Baldwin /* 1749289f547SJohn Baldwin * Used for a mask of optional flags where a value of 0 is valid. 1759289f547SJohn Baldwin */ 1769289f547SJohn Baldwin static bool 1779289f547SJohn Baldwin print_mask_0(FILE *fp, struct name_table *table, int val, int *rem) 1789289f547SJohn Baldwin { 1799289f547SJohn Baldwin 1809289f547SJohn Baldwin if (val == 0) { 1819289f547SJohn Baldwin fputs("0", fp); 1829289f547SJohn Baldwin if (rem != NULL) 1839289f547SJohn Baldwin *rem = 0; 1849289f547SJohn Baldwin return (true); 1859289f547SJohn Baldwin } 1869289f547SJohn Baldwin return (print_mask_int(fp, table, val, rem)); 1879289f547SJohn Baldwin } 1889289f547SJohn Baldwin 1899289f547SJohn Baldwin /* 1909289f547SJohn Baldwin * Like print_mask_0 but for a unsigned long instead of an int. 1919289f547SJohn Baldwin */ 1929289f547SJohn Baldwin static bool 1939289f547SJohn Baldwin print_mask_0ul(FILE *fp, struct name_table *table, u_long lval, u_long *rem) 1949289f547SJohn Baldwin { 1959289f547SJohn Baldwin uintmax_t val; 1969289f547SJohn Baldwin bool printed; 1979289f547SJohn Baldwin 1989289f547SJohn Baldwin if (lval == 0) { 1999289f547SJohn Baldwin fputs("0", fp); 2009289f547SJohn Baldwin if (rem != NULL) 2019289f547SJohn Baldwin *rem = 0; 2029289f547SJohn Baldwin return (true); 2039289f547SJohn Baldwin } 2049289f547SJohn Baldwin 2059289f547SJohn Baldwin printed = false; 2069289f547SJohn Baldwin val = lval; 2079289f547SJohn Baldwin print_mask_part(fp, table, &val, &printed); 2089289f547SJohn Baldwin if (rem != NULL) 2099289f547SJohn Baldwin *rem = val; 2109289f547SJohn Baldwin return (printed); 2119289f547SJohn Baldwin } 2129289f547SJohn Baldwin 2139289f547SJohn Baldwin static void 2149289f547SJohn Baldwin print_integer(FILE *fp, int val, int base) 2159289f547SJohn Baldwin { 2169289f547SJohn Baldwin 2179289f547SJohn Baldwin switch (base) { 2189289f547SJohn Baldwin case 8: 2199289f547SJohn Baldwin fprintf(fp, "0%o", val); 2209289f547SJohn Baldwin break; 2219289f547SJohn Baldwin case 10: 2229289f547SJohn Baldwin fprintf(fp, "%d", val); 2239289f547SJohn Baldwin break; 2249289f547SJohn Baldwin case 16: 2259289f547SJohn Baldwin fprintf(fp, "0x%x", val); 2269289f547SJohn Baldwin break; 2279289f547SJohn Baldwin default: 2289289f547SJohn Baldwin abort2("bad base", 0, NULL); 2299289f547SJohn Baldwin break; 2309289f547SJohn Baldwin } 2319289f547SJohn Baldwin } 2329289f547SJohn Baldwin 2339289f547SJohn Baldwin static bool 2349289f547SJohn Baldwin print_value(FILE *fp, struct name_table *table, uintmax_t val) 2359289f547SJohn Baldwin { 2369289f547SJohn Baldwin const char *str; 2379289f547SJohn Baldwin 2389289f547SJohn Baldwin str = lookup_value(table, val); 2399289f547SJohn Baldwin if (str != NULL) { 2409289f547SJohn Baldwin fputs(str, fp); 2419289f547SJohn Baldwin return (true); 2429289f547SJohn Baldwin } 2439289f547SJohn Baldwin return (false); 2449289f547SJohn Baldwin } 2459289f547SJohn Baldwin 2469289f547SJohn Baldwin const char * 2479289f547SJohn Baldwin sysdecode_atfd(int fd) 2489289f547SJohn Baldwin { 2499289f547SJohn Baldwin 2509289f547SJohn Baldwin if (fd == AT_FDCWD) 2519289f547SJohn Baldwin return ("AT_FDCWD"); 2529289f547SJohn Baldwin return (NULL); 2539289f547SJohn Baldwin } 2549289f547SJohn Baldwin 25539a3a438SJohn Baldwin bool 25639a3a438SJohn Baldwin sysdecode_atflags(FILE *fp, int flag, int *rem) 25739a3a438SJohn Baldwin { 25839a3a438SJohn Baldwin 25939a3a438SJohn Baldwin return (print_mask_int(fp, atflags, flag, rem)); 26039a3a438SJohn Baldwin } 26139a3a438SJohn Baldwin 2629289f547SJohn Baldwin static struct name_table semctlops[] = { 2639289f547SJohn Baldwin X(GETNCNT) X(GETPID) X(GETVAL) X(GETALL) X(GETZCNT) X(SETVAL) X(SETALL) 2649289f547SJohn Baldwin X(IPC_RMID) X(IPC_SET) X(IPC_STAT) XEND 2659289f547SJohn Baldwin }; 2669289f547SJohn Baldwin 2679289f547SJohn Baldwin const char * 2689289f547SJohn Baldwin sysdecode_semctl_cmd(int cmd) 2699289f547SJohn Baldwin { 2709289f547SJohn Baldwin 2719289f547SJohn Baldwin return (lookup_value(semctlops, cmd)); 2729289f547SJohn Baldwin } 2739289f547SJohn Baldwin 2749289f547SJohn Baldwin static struct name_table shmctlops[] = { 2759289f547SJohn Baldwin X(IPC_RMID) X(IPC_SET) X(IPC_STAT) XEND 2769289f547SJohn Baldwin }; 2779289f547SJohn Baldwin 2789289f547SJohn Baldwin const char * 2799289f547SJohn Baldwin sysdecode_shmctl_cmd(int cmd) 2809289f547SJohn Baldwin { 2819289f547SJohn Baldwin 2829289f547SJohn Baldwin return (lookup_value(shmctlops, cmd)); 2839289f547SJohn Baldwin } 2849289f547SJohn Baldwin 2859289f547SJohn Baldwin const char * 2869289f547SJohn Baldwin sysdecode_msgctl_cmd(int cmd) 2879289f547SJohn Baldwin { 2889289f547SJohn Baldwin 2899289f547SJohn Baldwin return (sysdecode_shmctl_cmd(cmd)); 2909289f547SJohn Baldwin } 2919289f547SJohn Baldwin 2929289f547SJohn Baldwin static struct name_table semgetflags[] = { 2939289f547SJohn Baldwin X(IPC_CREAT) X(IPC_EXCL) X(SEM_R) X(SEM_A) X((SEM_R>>3)) X((SEM_A>>3)) 2949289f547SJohn Baldwin X((SEM_R>>6)) X((SEM_A>>6)) XEND 2959289f547SJohn Baldwin }; 2969289f547SJohn Baldwin 2979289f547SJohn Baldwin bool 2989289f547SJohn Baldwin sysdecode_semget_flags(FILE *fp, int flag, int *rem) 2999289f547SJohn Baldwin { 3009289f547SJohn Baldwin 3019289f547SJohn Baldwin return (print_mask_int(fp, semgetflags, flag, rem)); 3029289f547SJohn Baldwin } 3039289f547SJohn Baldwin 3049289f547SJohn Baldwin static struct name_table idtypes[] = { 3059289f547SJohn Baldwin X(P_PID) X(P_PPID) X(P_PGID) X(P_SID) X(P_CID) X(P_UID) X(P_GID) 3069289f547SJohn Baldwin X(P_ALL) X(P_LWPID) X(P_TASKID) X(P_PROJID) X(P_POOLID) X(P_JAILID) 3079289f547SJohn Baldwin X(P_CTID) X(P_CPUID) X(P_PSETID) XEND 3089289f547SJohn Baldwin }; 3099289f547SJohn Baldwin 3109289f547SJohn Baldwin /* XXX: idtype is really an idtype_t */ 3119289f547SJohn Baldwin const char * 3129289f547SJohn Baldwin sysdecode_idtype(int idtype) 3139289f547SJohn Baldwin { 3149289f547SJohn Baldwin 3159289f547SJohn Baldwin return (lookup_value(idtypes, idtype)); 3169289f547SJohn Baldwin } 3179289f547SJohn Baldwin 3189289f547SJohn Baldwin /* 3199289f547SJohn Baldwin * [g|s]etsockopt's level argument can either be SOL_SOCKET or a 3209289f547SJohn Baldwin * protocol-specific value. 3219289f547SJohn Baldwin */ 3229289f547SJohn Baldwin const char * 3239289f547SJohn Baldwin sysdecode_sockopt_level(int level) 3249289f547SJohn Baldwin { 3259289f547SJohn Baldwin const char *str; 3269289f547SJohn Baldwin 3279289f547SJohn Baldwin if (level == SOL_SOCKET) 3289289f547SJohn Baldwin return ("SOL_SOCKET"); 3299289f547SJohn Baldwin 3309289f547SJohn Baldwin /* SOL_* constants for Bluetooth sockets. */ 3319289f547SJohn Baldwin str = lookup_value(ngbtsolevel, level); 3329289f547SJohn Baldwin if (str != NULL) 3339289f547SJohn Baldwin return (str); 3349289f547SJohn Baldwin 3359289f547SJohn Baldwin /* 3369289f547SJohn Baldwin * IP and Infiniband sockets use IP protocols as levels. Not all 3379289f547SJohn Baldwin * protocols are valid but it is simpler to just allow all of them. 3389289f547SJohn Baldwin * 3399289f547SJohn Baldwin * XXX: IPPROTO_IP == 0, but UNIX domain sockets use a level of 0 3409289f547SJohn Baldwin * for private options. 3419289f547SJohn Baldwin */ 3429289f547SJohn Baldwin str = sysdecode_ipproto(level); 3439289f547SJohn Baldwin if (str != NULL) 3449289f547SJohn Baldwin return (str); 3459289f547SJohn Baldwin 3469289f547SJohn Baldwin return (NULL); 3479289f547SJohn Baldwin } 3489289f547SJohn Baldwin 3499289f547SJohn Baldwin bool 3509289f547SJohn Baldwin sysdecode_vmprot(FILE *fp, int type, int *rem) 3519289f547SJohn Baldwin { 3529289f547SJohn Baldwin 3539289f547SJohn Baldwin return (print_mask_int(fp, vmprot, type, rem)); 3549289f547SJohn Baldwin } 3559289f547SJohn Baldwin 3569289f547SJohn Baldwin static struct name_table sockflags[] = { 3579289f547SJohn Baldwin X(SOCK_CLOEXEC) X(SOCK_NONBLOCK) XEND 3589289f547SJohn Baldwin }; 3599289f547SJohn Baldwin 3609289f547SJohn Baldwin bool 3619289f547SJohn Baldwin sysdecode_socket_type(FILE *fp, int type, int *rem) 3629289f547SJohn Baldwin { 3639289f547SJohn Baldwin const char *str; 3649289f547SJohn Baldwin uintmax_t val; 3659289f547SJohn Baldwin bool printed; 3669289f547SJohn Baldwin 3679289f547SJohn Baldwin str = lookup_value(socktype, type & ~(SOCK_CLOEXEC | SOCK_NONBLOCK)); 3689289f547SJohn Baldwin if (str != NULL) { 3699289f547SJohn Baldwin fputs(str, fp); 3709289f547SJohn Baldwin *rem = 0; 3719289f547SJohn Baldwin printed = true; 3729289f547SJohn Baldwin } else { 3739289f547SJohn Baldwin *rem = type & ~(SOCK_CLOEXEC | SOCK_NONBLOCK); 3749289f547SJohn Baldwin printed = false; 3759289f547SJohn Baldwin } 3769289f547SJohn Baldwin val = type & (SOCK_CLOEXEC | SOCK_NONBLOCK); 3779289f547SJohn Baldwin print_mask_part(fp, sockflags, &val, &printed); 3789289f547SJohn Baldwin return (printed); 3799289f547SJohn Baldwin } 3809289f547SJohn Baldwin 3819289f547SJohn Baldwin bool 3829289f547SJohn Baldwin sysdecode_access_mode(FILE *fp, int mode, int *rem) 3839289f547SJohn Baldwin { 3849289f547SJohn Baldwin 3859289f547SJohn Baldwin return (print_mask_int(fp, accessmode, mode, rem)); 3869289f547SJohn Baldwin } 3879289f547SJohn Baldwin 3889289f547SJohn Baldwin /* XXX: 'type' is really an acl_type_t. */ 3899289f547SJohn Baldwin const char * 3909289f547SJohn Baldwin sysdecode_acltype(int type) 3919289f547SJohn Baldwin { 3929289f547SJohn Baldwin 3939289f547SJohn Baldwin return (lookup_value(acltype, type)); 3949289f547SJohn Baldwin } 3959289f547SJohn Baldwin 3969289f547SJohn Baldwin bool 3979289f547SJohn Baldwin sysdecode_cap_fcntlrights(FILE *fp, uint32_t rights, uint32_t *rem) 3989289f547SJohn Baldwin { 3999289f547SJohn Baldwin 4009289f547SJohn Baldwin return (print_mask_int(fp, capfcntl, rights, rem)); 4019289f547SJohn Baldwin } 4029289f547SJohn Baldwin 4039289f547SJohn Baldwin const char * 4049289f547SJohn Baldwin sysdecode_extattrnamespace(int namespace) 4059289f547SJohn Baldwin { 4069289f547SJohn Baldwin 4079289f547SJohn Baldwin return (lookup_value(extattrns, namespace)); 4089289f547SJohn Baldwin } 4099289f547SJohn Baldwin 4109289f547SJohn Baldwin const char * 4119289f547SJohn Baldwin sysdecode_fadvice(int advice) 4129289f547SJohn Baldwin { 4139289f547SJohn Baldwin 4149289f547SJohn Baldwin return (lookup_value(fadvisebehav, advice)); 4159289f547SJohn Baldwin } 4169289f547SJohn Baldwin 4179289f547SJohn Baldwin bool 4189289f547SJohn Baldwin sysdecode_open_flags(FILE *fp, int flags, int *rem) 4199289f547SJohn Baldwin { 4209289f547SJohn Baldwin bool printed; 4219289f547SJohn Baldwin int mode; 4229289f547SJohn Baldwin uintmax_t val; 4239289f547SJohn Baldwin 4249289f547SJohn Baldwin mode = flags & O_ACCMODE; 4259289f547SJohn Baldwin flags &= ~O_ACCMODE; 4269289f547SJohn Baldwin switch (mode) { 4279289f547SJohn Baldwin case O_RDONLY: 4289289f547SJohn Baldwin if (flags & O_EXEC) { 4299289f547SJohn Baldwin flags &= ~O_EXEC; 4309289f547SJohn Baldwin fputs("O_EXEC", fp); 4319289f547SJohn Baldwin } else 4329289f547SJohn Baldwin fputs("O_RDONLY", fp); 4339289f547SJohn Baldwin printed = true; 4349289f547SJohn Baldwin mode = 0; 4359289f547SJohn Baldwin break; 4369289f547SJohn Baldwin case O_WRONLY: 4379289f547SJohn Baldwin fputs("O_WRONLY", fp); 4389289f547SJohn Baldwin printed = true; 4399289f547SJohn Baldwin mode = 0; 4409289f547SJohn Baldwin break; 4419289f547SJohn Baldwin case O_RDWR: 4429289f547SJohn Baldwin fputs("O_RDWR", fp); 4439289f547SJohn Baldwin printed = true; 4449289f547SJohn Baldwin mode = 0; 4459289f547SJohn Baldwin break; 4469289f547SJohn Baldwin default: 4479289f547SJohn Baldwin printed = false; 4489289f547SJohn Baldwin } 4499289f547SJohn Baldwin val = (unsigned)flags; 4509289f547SJohn Baldwin print_mask_part(fp, openflags, &val, &printed); 4519289f547SJohn Baldwin if (rem != NULL) 4529289f547SJohn Baldwin *rem = val | mode; 4539289f547SJohn Baldwin return (printed); 4549289f547SJohn Baldwin } 4559289f547SJohn Baldwin 4569289f547SJohn Baldwin bool 4579289f547SJohn Baldwin sysdecode_fcntl_fileflags(FILE *fp, int flags, int *rem) 4589289f547SJohn Baldwin { 4599289f547SJohn Baldwin bool printed; 4609289f547SJohn Baldwin int oflags; 4619289f547SJohn Baldwin 4629289f547SJohn Baldwin /* 4639289f547SJohn Baldwin * The file flags used with F_GETFL/F_SETFL mostly match the 4649289f547SJohn Baldwin * flags passed to open(2). However, a few open-only flag 4659289f547SJohn Baldwin * bits have been repurposed for fcntl-only flags. 4669289f547SJohn Baldwin */ 4679289f547SJohn Baldwin oflags = flags & ~(O_NOFOLLOW | FRDAHEAD); 4689289f547SJohn Baldwin printed = sysdecode_open_flags(fp, oflags, rem); 4699289f547SJohn Baldwin if (flags & O_NOFOLLOW) { 4709289f547SJohn Baldwin fprintf(fp, "%sFPOIXSHM", printed ? "|" : ""); 4719289f547SJohn Baldwin printed = true; 4729289f547SJohn Baldwin } 4739289f547SJohn Baldwin if (flags & FRDAHEAD) { 4749289f547SJohn Baldwin fprintf(fp, "%sFRDAHEAD", printed ? "|" : ""); 4759289f547SJohn Baldwin printed = true; 4769289f547SJohn Baldwin } 4779289f547SJohn Baldwin return (printed); 4789289f547SJohn Baldwin } 4799289f547SJohn Baldwin 4809289f547SJohn Baldwin bool 4819289f547SJohn Baldwin sysdecode_flock_operation(FILE *fp, int operation, int *rem) 4829289f547SJohn Baldwin { 4839289f547SJohn Baldwin 4849289f547SJohn Baldwin return (print_mask_int(fp, flockops, operation, rem)); 4859289f547SJohn Baldwin } 4869289f547SJohn Baldwin 48748f79574SJohn Baldwin static struct name_table getfsstatmode[] = { 48848f79574SJohn Baldwin X(MNT_WAIT) X(MNT_NOWAIT) XEND 48948f79574SJohn Baldwin }; 49048f79574SJohn Baldwin 49148f79574SJohn Baldwin const char * 49248f79574SJohn Baldwin sysdecode_getfsstat_mode(int mode) 4939289f547SJohn Baldwin { 4949289f547SJohn Baldwin 49548f79574SJohn Baldwin return (lookup_value(getfsstatmode, mode)); 4969289f547SJohn Baldwin } 4979289f547SJohn Baldwin 4989289f547SJohn Baldwin const char * 499ee8aa41dSJohn Baldwin sysdecode_getrusage_who(int who) 500ee8aa41dSJohn Baldwin { 501ee8aa41dSJohn Baldwin 502ee8aa41dSJohn Baldwin return (lookup_value(rusage, who)); 503ee8aa41dSJohn Baldwin } 504ee8aa41dSJohn Baldwin 505ffb66079SJohn Baldwin static struct name_table kevent_user_ffctrl[] = { 506ffb66079SJohn Baldwin X(NOTE_FFNOP) X(NOTE_FFAND) X(NOTE_FFOR) X(NOTE_FFCOPY) 507ffb66079SJohn Baldwin XEND 508ffb66079SJohn Baldwin }; 509ffb66079SJohn Baldwin 510ffb66079SJohn Baldwin static struct name_table kevent_rdwr_fflags[] = { 511ffb66079SJohn Baldwin X(NOTE_LOWAT) X(NOTE_FILE_POLL) XEND 512ffb66079SJohn Baldwin }; 513ffb66079SJohn Baldwin 514ffb66079SJohn Baldwin static struct name_table kevent_vnode_fflags[] = { 515ffb66079SJohn Baldwin X(NOTE_DELETE) X(NOTE_WRITE) X(NOTE_EXTEND) X(NOTE_ATTRIB) 516ffb66079SJohn Baldwin X(NOTE_LINK) X(NOTE_RENAME) X(NOTE_REVOKE) X(NOTE_OPEN) X(NOTE_CLOSE) 517ffb66079SJohn Baldwin X(NOTE_CLOSE_WRITE) X(NOTE_READ) XEND 518ffb66079SJohn Baldwin }; 519ffb66079SJohn Baldwin 520ffb66079SJohn Baldwin static struct name_table kevent_proc_fflags[] = { 521ffb66079SJohn Baldwin X(NOTE_EXIT) X(NOTE_FORK) X(NOTE_EXEC) X(NOTE_TRACK) X(NOTE_TRACKERR) 522ffb66079SJohn Baldwin X(NOTE_CHILD) XEND 523ffb66079SJohn Baldwin }; 524ffb66079SJohn Baldwin 525ffb66079SJohn Baldwin static struct name_table kevent_timer_fflags[] = { 526ffb66079SJohn Baldwin X(NOTE_SECONDS) X(NOTE_MSECONDS) X(NOTE_USECONDS) X(NOTE_NSECONDS) 527ffb66079SJohn Baldwin X(NOTE_ABSTIME) XEND 528ffb66079SJohn Baldwin }; 529ffb66079SJohn Baldwin 530ffb66079SJohn Baldwin void 531ffb66079SJohn Baldwin sysdecode_kevent_fflags(FILE *fp, short filter, int fflags, int base) 532ffb66079SJohn Baldwin { 533ffb66079SJohn Baldwin int rem; 534ffb66079SJohn Baldwin 535ffb66079SJohn Baldwin if (fflags == 0) { 536ffb66079SJohn Baldwin fputs("0", fp); 537ffb66079SJohn Baldwin return; 538ffb66079SJohn Baldwin } 539ffb66079SJohn Baldwin 540ffb66079SJohn Baldwin switch (filter) { 541ffb66079SJohn Baldwin case EVFILT_READ: 542ffb66079SJohn Baldwin case EVFILT_WRITE: 543ffb66079SJohn Baldwin if (!print_mask_int(fp, kevent_rdwr_fflags, fflags, &rem)) 544ffb66079SJohn Baldwin fprintf(fp, "%#x", rem); 545ffb66079SJohn Baldwin else if (rem != 0) 546ffb66079SJohn Baldwin fprintf(fp, "|%#x", rem); 547ffb66079SJohn Baldwin break; 548ffb66079SJohn Baldwin case EVFILT_VNODE: 549ffb66079SJohn Baldwin if (!print_mask_int(fp, kevent_vnode_fflags, fflags, &rem)) 550ffb66079SJohn Baldwin fprintf(fp, "%#x", rem); 551ffb66079SJohn Baldwin else if (rem != 0) 552ffb66079SJohn Baldwin fprintf(fp, "|%#x", rem); 553ffb66079SJohn Baldwin break; 554ffb66079SJohn Baldwin case EVFILT_PROC: 555ffb66079SJohn Baldwin case EVFILT_PROCDESC: 556ffb66079SJohn Baldwin if (!print_mask_int(fp, kevent_proc_fflags, fflags, &rem)) 557ffb66079SJohn Baldwin fprintf(fp, "%#x", rem); 558ffb66079SJohn Baldwin else if (rem != 0) 559ffb66079SJohn Baldwin fprintf(fp, "|%#x", rem); 560ffb66079SJohn Baldwin break; 561ffb66079SJohn Baldwin case EVFILT_TIMER: 562ffb66079SJohn Baldwin if (!print_mask_int(fp, kevent_timer_fflags, fflags, &rem)) 563ffb66079SJohn Baldwin fprintf(fp, "%#x", rem); 564ffb66079SJohn Baldwin else if (rem != 0) 565ffb66079SJohn Baldwin fprintf(fp, "|%#x", rem); 566ffb66079SJohn Baldwin break; 567ffb66079SJohn Baldwin case EVFILT_USER: { 568ffb66079SJohn Baldwin unsigned int ctrl, data; 569ffb66079SJohn Baldwin 570ffb66079SJohn Baldwin ctrl = fflags & NOTE_FFCTRLMASK; 571ffb66079SJohn Baldwin data = fflags & NOTE_FFLAGSMASK; 572ffb66079SJohn Baldwin 573ffb66079SJohn Baldwin if (fflags & NOTE_TRIGGER) { 574ffb66079SJohn Baldwin fputs("NOTE_TRIGGER", fp); 575ffb66079SJohn Baldwin if (fflags == NOTE_TRIGGER) 576ffb66079SJohn Baldwin return; 577ffb66079SJohn Baldwin fputc('|', fp); 578ffb66079SJohn Baldwin } 579ffb66079SJohn Baldwin 580ffb66079SJohn Baldwin /* 581ffb66079SJohn Baldwin * An event with 'ctrl' == NOTE_FFNOP is either a reported 582ffb66079SJohn Baldwin * (output) event for which only 'data' should be output 583ffb66079SJohn Baldwin * or a pointless input event. Assume that pointless 584ffb66079SJohn Baldwin * input events don't occur in practice. An event with 585ffb66079SJohn Baldwin * NOTE_TRIGGER is always an input event. 586ffb66079SJohn Baldwin */ 587ffb66079SJohn Baldwin if (ctrl != NOTE_FFNOP || fflags & NOTE_TRIGGER) { 588ffb66079SJohn Baldwin fprintf(fp, "%s|%#x", 589ffb66079SJohn Baldwin lookup_value(kevent_user_ffctrl, ctrl), data); 590ffb66079SJohn Baldwin } else { 591ffb66079SJohn Baldwin print_integer(fp, data, base); 592ffb66079SJohn Baldwin } 593ffb66079SJohn Baldwin break; 594ffb66079SJohn Baldwin } 595ffb66079SJohn Baldwin default: 596ffb66079SJohn Baldwin print_integer(fp, fflags, base); 597ffb66079SJohn Baldwin break; 598ffb66079SJohn Baldwin } 599ffb66079SJohn Baldwin } 600ffb66079SJohn Baldwin 601ffb66079SJohn Baldwin bool 602ffb66079SJohn Baldwin sysdecode_kevent_flags(FILE *fp, int flags, int *rem) 603ffb66079SJohn Baldwin { 604ffb66079SJohn Baldwin 605ffb66079SJohn Baldwin return (print_mask_int(fp, keventflags, flags, rem)); 606ffb66079SJohn Baldwin } 607ffb66079SJohn Baldwin 608ffb66079SJohn Baldwin const char * 609ffb66079SJohn Baldwin sysdecode_kevent_filter(int filter) 610ffb66079SJohn Baldwin { 611ffb66079SJohn Baldwin 612ffb66079SJohn Baldwin return (lookup_value(keventfilters, filter)); 613ffb66079SJohn Baldwin } 614ffb66079SJohn Baldwin 615ee8aa41dSJohn Baldwin const char * 6169289f547SJohn Baldwin sysdecode_kldsym_cmd(int cmd) 6179289f547SJohn Baldwin { 6189289f547SJohn Baldwin 6199289f547SJohn Baldwin return (lookup_value(kldsymcmd, cmd)); 6209289f547SJohn Baldwin } 6219289f547SJohn Baldwin 6229289f547SJohn Baldwin const char * 6239289f547SJohn Baldwin sysdecode_kldunload_flags(int flags) 6249289f547SJohn Baldwin { 6259289f547SJohn Baldwin 6269289f547SJohn Baldwin return (lookup_value(kldunloadfflags, flags)); 6279289f547SJohn Baldwin } 6289289f547SJohn Baldwin 6299289f547SJohn Baldwin const char * 6309289f547SJohn Baldwin sysdecode_lio_listio_mode(int mode) 6319289f547SJohn Baldwin { 6329289f547SJohn Baldwin 6339289f547SJohn Baldwin return (lookup_value(lio_listiomodes, mode)); 6349289f547SJohn Baldwin } 6359289f547SJohn Baldwin 6369289f547SJohn Baldwin const char * 6379289f547SJohn Baldwin sysdecode_madvice(int advice) 6389289f547SJohn Baldwin { 6399289f547SJohn Baldwin 6409289f547SJohn Baldwin return (lookup_value(madvisebehav, advice)); 6419289f547SJohn Baldwin } 6429289f547SJohn Baldwin 6439289f547SJohn Baldwin const char * 6449289f547SJohn Baldwin sysdecode_minherit_inherit(int inherit) 6459289f547SJohn Baldwin { 6469289f547SJohn Baldwin 6479289f547SJohn Baldwin return (lookup_value(minheritflags, inherit)); 6489289f547SJohn Baldwin } 6499289f547SJohn Baldwin 6509289f547SJohn Baldwin bool 6519289f547SJohn Baldwin sysdecode_mlockall_flags(FILE *fp, int flags, int *rem) 6529289f547SJohn Baldwin { 6539289f547SJohn Baldwin 6549289f547SJohn Baldwin return (print_mask_int(fp, mlockallflags, flags, rem)); 6559289f547SJohn Baldwin } 6569289f547SJohn Baldwin 6579289f547SJohn Baldwin bool 6589289f547SJohn Baldwin sysdecode_mmap_prot(FILE *fp, int prot, int *rem) 6599289f547SJohn Baldwin { 660c1dd36cfSPawel Biernacki int protm; 661c1dd36cfSPawel Biernacki bool printed; 6629289f547SJohn Baldwin 663c1dd36cfSPawel Biernacki printed = false; 664c1dd36cfSPawel Biernacki protm = PROT_MAX_EXTRACT(prot); 665*569da02bSPawel Biernacki prot &= ~PROT_MAX(protm); 666c1dd36cfSPawel Biernacki if (protm != 0) { 667c1dd36cfSPawel Biernacki fputs("PROT_MAX(", fp); 668c1dd36cfSPawel Biernacki printed = print_mask_int(fp, mmapprot, protm, rem); 669c1dd36cfSPawel Biernacki fputs(")|", fp); 670c1dd36cfSPawel Biernacki } 671c1dd36cfSPawel Biernacki return (print_mask_int(fp, mmapprot, prot, rem) || printed); 6729289f547SJohn Baldwin } 6739289f547SJohn Baldwin 6749289f547SJohn Baldwin bool 6759289f547SJohn Baldwin sysdecode_fileflags(FILE *fp, fflags_t flags, fflags_t *rem) 6769289f547SJohn Baldwin { 6779289f547SJohn Baldwin 6789289f547SJohn Baldwin return (print_mask_0(fp, fileflags, flags, rem)); 6799289f547SJohn Baldwin } 6809289f547SJohn Baldwin 6819289f547SJohn Baldwin bool 6829289f547SJohn Baldwin sysdecode_filemode(FILE *fp, int mode, int *rem) 6839289f547SJohn Baldwin { 6849289f547SJohn Baldwin 6859289f547SJohn Baldwin return (print_mask_0(fp, filemode, mode, rem)); 6869289f547SJohn Baldwin } 6879289f547SJohn Baldwin 6889289f547SJohn Baldwin bool 6899289f547SJohn Baldwin sysdecode_mount_flags(FILE *fp, int flags, int *rem) 6909289f547SJohn Baldwin { 6919289f547SJohn Baldwin 6929289f547SJohn Baldwin return (print_mask_int(fp, mountflags, flags, rem)); 6939289f547SJohn Baldwin } 6949289f547SJohn Baldwin 6959289f547SJohn Baldwin bool 6969289f547SJohn Baldwin sysdecode_msync_flags(FILE *fp, int flags, int *rem) 6979289f547SJohn Baldwin { 6989289f547SJohn Baldwin 6999289f547SJohn Baldwin return (print_mask_int(fp, msyncflags, flags, rem)); 7009289f547SJohn Baldwin } 7019289f547SJohn Baldwin 7029289f547SJohn Baldwin const char * 7039289f547SJohn Baldwin sysdecode_nfssvc_flags(int flags) 7049289f547SJohn Baldwin { 7059289f547SJohn Baldwin 7069289f547SJohn Baldwin return (lookup_value(nfssvcflags, flags)); 7079289f547SJohn Baldwin } 7089289f547SJohn Baldwin 7099289f547SJohn Baldwin static struct name_table pipe2flags[] = { 7109289f547SJohn Baldwin X(O_CLOEXEC) X(O_NONBLOCK) XEND 7119289f547SJohn Baldwin }; 7129289f547SJohn Baldwin 7139289f547SJohn Baldwin bool 7149289f547SJohn Baldwin sysdecode_pipe2_flags(FILE *fp, int flags, int *rem) 7159289f547SJohn Baldwin { 7169289f547SJohn Baldwin 7179289f547SJohn Baldwin return (print_mask_0(fp, pipe2flags, flags, rem)); 7189289f547SJohn Baldwin } 7199289f547SJohn Baldwin 7209289f547SJohn Baldwin const char * 7219289f547SJohn Baldwin sysdecode_prio_which(int which) 7229289f547SJohn Baldwin { 7239289f547SJohn Baldwin 7249289f547SJohn Baldwin return (lookup_value(prio, which)); 7259289f547SJohn Baldwin } 7269289f547SJohn Baldwin 7279289f547SJohn Baldwin const char * 7289289f547SJohn Baldwin sysdecode_procctl_cmd(int cmd) 7299289f547SJohn Baldwin { 7309289f547SJohn Baldwin 7319289f547SJohn Baldwin return (lookup_value(procctlcmd, cmd)); 7329289f547SJohn Baldwin } 7339289f547SJohn Baldwin 7349289f547SJohn Baldwin const char * 7359289f547SJohn Baldwin sysdecode_ptrace_request(int request) 7369289f547SJohn Baldwin { 7379289f547SJohn Baldwin 7389289f547SJohn Baldwin return (lookup_value(ptraceop, request)); 7399289f547SJohn Baldwin } 7409289f547SJohn Baldwin 7419289f547SJohn Baldwin static struct name_table quotatypes[] = { 7429289f547SJohn Baldwin X(GRPQUOTA) X(USRQUOTA) XEND 7439289f547SJohn Baldwin }; 7449289f547SJohn Baldwin 7459289f547SJohn Baldwin bool 7469289f547SJohn Baldwin sysdecode_quotactl_cmd(FILE *fp, int cmd) 7479289f547SJohn Baldwin { 7489289f547SJohn Baldwin const char *primary, *type; 7499289f547SJohn Baldwin 7509289f547SJohn Baldwin primary = lookup_value(quotactlcmds, cmd >> SUBCMDSHIFT); 7519289f547SJohn Baldwin if (primary == NULL) 7529289f547SJohn Baldwin return (false); 7539289f547SJohn Baldwin fprintf(fp, "QCMD(%s,", primary); 7549289f547SJohn Baldwin type = lookup_value(quotatypes, cmd & SUBCMDMASK); 7559289f547SJohn Baldwin if (type != NULL) 7569289f547SJohn Baldwin fprintf(fp, "%s", type); 7579289f547SJohn Baldwin else 7589289f547SJohn Baldwin fprintf(fp, "%#x", cmd & SUBCMDMASK); 7599289f547SJohn Baldwin fprintf(fp, ")"); 7609289f547SJohn Baldwin return (true); 7619289f547SJohn Baldwin } 7629289f547SJohn Baldwin 7639289f547SJohn Baldwin bool 7649289f547SJohn Baldwin sysdecode_reboot_howto(FILE *fp, int howto, int *rem) 7659289f547SJohn Baldwin { 76630b94d0cSJohn Baldwin bool printed; 7679289f547SJohn Baldwin 76830b94d0cSJohn Baldwin /* 76930b94d0cSJohn Baldwin * RB_AUTOBOOT is special in that its value is zero, but it is 77030b94d0cSJohn Baldwin * also an implied argument if a different operation is not 7712b6e6d85SJohn Baldwin * requested via RB_HALT, RB_POWERCYCLE, RB_POWEROFF, or 7722b6e6d85SJohn Baldwin * RB_REROOT. 77330b94d0cSJohn Baldwin */ 7742b6e6d85SJohn Baldwin if (howto != 0 && (howto & (RB_HALT | RB_POWEROFF | RB_REROOT | 7752b6e6d85SJohn Baldwin RB_POWERCYCLE)) == 0) { 77630b94d0cSJohn Baldwin fputs("RB_AUTOBOOT|", fp); 77730b94d0cSJohn Baldwin printed = true; 77830b94d0cSJohn Baldwin } else 77930b94d0cSJohn Baldwin printed = false; 78030b94d0cSJohn Baldwin return (print_mask_int(fp, rebootopt, howto, rem) || printed); 7819289f547SJohn Baldwin } 7829289f547SJohn Baldwin 7839289f547SJohn Baldwin bool 7849289f547SJohn Baldwin sysdecode_rfork_flags(FILE *fp, int flags, int *rem) 7859289f547SJohn Baldwin { 7869289f547SJohn Baldwin 7879289f547SJohn Baldwin return (print_mask_int(fp, rforkflags, flags, rem)); 7889289f547SJohn Baldwin } 7899289f547SJohn Baldwin 7909289f547SJohn Baldwin const char * 7919289f547SJohn Baldwin sysdecode_rlimit(int resource) 7929289f547SJohn Baldwin { 7939289f547SJohn Baldwin 7949289f547SJohn Baldwin return (lookup_value(rlimit, resource)); 7959289f547SJohn Baldwin } 7969289f547SJohn Baldwin 7979289f547SJohn Baldwin const char * 7989289f547SJohn Baldwin sysdecode_scheduler_policy(int policy) 7999289f547SJohn Baldwin { 8009289f547SJohn Baldwin 8019289f547SJohn Baldwin return (lookup_value(schedpolicy, policy)); 8029289f547SJohn Baldwin } 8039289f547SJohn Baldwin 8049289f547SJohn Baldwin bool 8059289f547SJohn Baldwin sysdecode_sendfile_flags(FILE *fp, int flags, int *rem) 8069289f547SJohn Baldwin { 8079289f547SJohn Baldwin 8089289f547SJohn Baldwin return (print_mask_int(fp, sendfileflags, flags, rem)); 8099289f547SJohn Baldwin } 8109289f547SJohn Baldwin 8119289f547SJohn Baldwin bool 8129289f547SJohn Baldwin sysdecode_shmat_flags(FILE *fp, int flags, int *rem) 8139289f547SJohn Baldwin { 8149289f547SJohn Baldwin 8159289f547SJohn Baldwin return (print_mask_int(fp, shmatflags, flags, rem)); 8169289f547SJohn Baldwin } 8179289f547SJohn Baldwin 8189289f547SJohn Baldwin const char * 8199289f547SJohn Baldwin sysdecode_shutdown_how(int how) 8209289f547SJohn Baldwin { 8219289f547SJohn Baldwin 8229289f547SJohn Baldwin return (lookup_value(shutdownhow, how)); 8239289f547SJohn Baldwin } 8249289f547SJohn Baldwin 8259289f547SJohn Baldwin const char * 8269289f547SJohn Baldwin sysdecode_sigbus_code(int si_code) 8279289f547SJohn Baldwin { 8289289f547SJohn Baldwin 8299289f547SJohn Baldwin return (lookup_value(sigbuscode, si_code)); 8309289f547SJohn Baldwin } 8319289f547SJohn Baldwin 8329289f547SJohn Baldwin const char * 8339289f547SJohn Baldwin sysdecode_sigchld_code(int si_code) 8349289f547SJohn Baldwin { 8359289f547SJohn Baldwin 8369289f547SJohn Baldwin return (lookup_value(sigchldcode, si_code)); 8379289f547SJohn Baldwin } 8389289f547SJohn Baldwin 8399289f547SJohn Baldwin const char * 8409289f547SJohn Baldwin sysdecode_sigfpe_code(int si_code) 8419289f547SJohn Baldwin { 8429289f547SJohn Baldwin 8439289f547SJohn Baldwin return (lookup_value(sigfpecode, si_code)); 8449289f547SJohn Baldwin } 8459289f547SJohn Baldwin 8469289f547SJohn Baldwin const char * 8479289f547SJohn Baldwin sysdecode_sigill_code(int si_code) 8489289f547SJohn Baldwin { 8499289f547SJohn Baldwin 8509289f547SJohn Baldwin return (lookup_value(sigillcode, si_code)); 8519289f547SJohn Baldwin } 8529289f547SJohn Baldwin 8539289f547SJohn Baldwin const char * 8549289f547SJohn Baldwin sysdecode_sigsegv_code(int si_code) 8559289f547SJohn Baldwin { 8569289f547SJohn Baldwin 8579289f547SJohn Baldwin return (lookup_value(sigsegvcode, si_code)); 8589289f547SJohn Baldwin } 8599289f547SJohn Baldwin 8609289f547SJohn Baldwin const char * 8619289f547SJohn Baldwin sysdecode_sigtrap_code(int si_code) 8629289f547SJohn Baldwin { 8639289f547SJohn Baldwin 8649289f547SJohn Baldwin return (lookup_value(sigtrapcode, si_code)); 8659289f547SJohn Baldwin } 8669289f547SJohn Baldwin 8679289f547SJohn Baldwin const char * 8689289f547SJohn Baldwin sysdecode_sigprocmask_how(int how) 8699289f547SJohn Baldwin { 8709289f547SJohn Baldwin 8719289f547SJohn Baldwin return (lookup_value(sigprocmaskhow, how)); 8729289f547SJohn Baldwin } 8739289f547SJohn Baldwin 8749289f547SJohn Baldwin const char * 8759289f547SJohn Baldwin sysdecode_socketdomain(int domain) 8769289f547SJohn Baldwin { 8779289f547SJohn Baldwin 8789289f547SJohn Baldwin return (lookup_value(sockdomain, domain)); 8799289f547SJohn Baldwin } 8809289f547SJohn Baldwin 8819289f547SJohn Baldwin const char * 882738a93a4SMichael Tuexen sysdecode_socket_protocol(int domain, int protocol) 883738a93a4SMichael Tuexen { 884738a93a4SMichael Tuexen 885738a93a4SMichael Tuexen switch (domain) { 886738a93a4SMichael Tuexen case PF_INET: 887738a93a4SMichael Tuexen case PF_INET6: 888738a93a4SMichael Tuexen return (lookup_value(sockipproto, protocol)); 889738a93a4SMichael Tuexen default: 890738a93a4SMichael Tuexen return (NULL); 891738a93a4SMichael Tuexen } 892738a93a4SMichael Tuexen } 893738a93a4SMichael Tuexen 894738a93a4SMichael Tuexen const char * 8959289f547SJohn Baldwin sysdecode_sockaddr_family(int sa_family) 8969289f547SJohn Baldwin { 8979289f547SJohn Baldwin 8989289f547SJohn Baldwin return (lookup_value(sockfamily, sa_family)); 8999289f547SJohn Baldwin } 9009289f547SJohn Baldwin 9019289f547SJohn Baldwin const char * 9029289f547SJohn Baldwin sysdecode_ipproto(int protocol) 9039289f547SJohn Baldwin { 9049289f547SJohn Baldwin 9059289f547SJohn Baldwin return (lookup_value(sockipproto, protocol)); 9069289f547SJohn Baldwin } 9079289f547SJohn Baldwin 9089289f547SJohn Baldwin const char * 9099289f547SJohn Baldwin sysdecode_sockopt_name(int level, int optname) 9109289f547SJohn Baldwin { 9119289f547SJohn Baldwin 9129289f547SJohn Baldwin if (level == SOL_SOCKET) 9139289f547SJohn Baldwin return (lookup_value(sockopt, optname)); 9149289f547SJohn Baldwin if (level == IPPROTO_IP) 9159289f547SJohn Baldwin /* XXX: UNIX domain socket options use a level of 0 also. */ 9169289f547SJohn Baldwin return (lookup_value(sockoptip, optname)); 917702eb303SMichael Tuexen if (level == IPPROTO_IPV6) 918702eb303SMichael Tuexen return (lookup_value(sockoptipv6, optname)); 919472e8009SMichael Tuexen if (level == IPPROTO_SCTP) 920472e8009SMichael Tuexen return (lookup_value(sockoptsctp, optname)); 9219289f547SJohn Baldwin if (level == IPPROTO_TCP) 9229289f547SJohn Baldwin return (lookup_value(sockopttcp, optname)); 9239289f547SJohn Baldwin if (level == IPPROTO_UDP) 9249289f547SJohn Baldwin return (lookup_value(sockoptudp, optname)); 925ed466c34SMichael Tuexen if (level == IPPROTO_UDPLITE) 926ed466c34SMichael Tuexen return (lookup_value(sockoptudplite, optname)); 9279289f547SJohn Baldwin return (NULL); 9289289f547SJohn Baldwin } 9299289f547SJohn Baldwin 9309289f547SJohn Baldwin bool 9319289f547SJohn Baldwin sysdecode_thr_create_flags(FILE *fp, int flags, int *rem) 9329289f547SJohn Baldwin { 9339289f547SJohn Baldwin 9349289f547SJohn Baldwin return (print_mask_int(fp, thrcreateflags, flags, rem)); 9359289f547SJohn Baldwin } 9369289f547SJohn Baldwin 9379289f547SJohn Baldwin const char * 9389289f547SJohn Baldwin sysdecode_umtx_op(int op) 9399289f547SJohn Baldwin { 9409289f547SJohn Baldwin 9419289f547SJohn Baldwin return (lookup_value(umtxop, op)); 9429289f547SJohn Baldwin } 9439289f547SJohn Baldwin 9449289f547SJohn Baldwin const char * 9459289f547SJohn Baldwin sysdecode_vmresult(int result) 9469289f547SJohn Baldwin { 9479289f547SJohn Baldwin 9489289f547SJohn Baldwin return (lookup_value(vmresult, result)); 9499289f547SJohn Baldwin } 9509289f547SJohn Baldwin 9519289f547SJohn Baldwin bool 9529289f547SJohn Baldwin sysdecode_wait4_options(FILE *fp, int options, int *rem) 9539289f547SJohn Baldwin { 9549289f547SJohn Baldwin bool printed; 9559289f547SJohn Baldwin int opt6; 9569289f547SJohn Baldwin 9579289f547SJohn Baldwin /* A flags value of 0 is normal. */ 9589289f547SJohn Baldwin if (options == 0) { 9599289f547SJohn Baldwin fputs("0", fp); 9609289f547SJohn Baldwin if (rem != NULL) 9619289f547SJohn Baldwin *rem = 0; 9629289f547SJohn Baldwin return (true); 9639289f547SJohn Baldwin } 9649289f547SJohn Baldwin 9659289f547SJohn Baldwin /* 9669289f547SJohn Baldwin * These flags are implicit and aren't valid flags for wait4() 9679289f547SJohn Baldwin * directly (though they don't fail with EINVAL). 9689289f547SJohn Baldwin */ 9699289f547SJohn Baldwin opt6 = options & (WEXITED | WTRAPPED); 9709289f547SJohn Baldwin options &= ~opt6; 9719289f547SJohn Baldwin printed = print_mask_int(fp, wait6opt, options, rem); 9729289f547SJohn Baldwin if (rem != NULL) 9739289f547SJohn Baldwin *rem |= opt6; 9749289f547SJohn Baldwin return (printed); 9759289f547SJohn Baldwin } 9769289f547SJohn Baldwin 9779289f547SJohn Baldwin bool 9789289f547SJohn Baldwin sysdecode_wait6_options(FILE *fp, int options, int *rem) 9799289f547SJohn Baldwin { 9809289f547SJohn Baldwin 9819289f547SJohn Baldwin return (print_mask_int(fp, wait6opt, options, rem)); 9829289f547SJohn Baldwin } 9839289f547SJohn Baldwin 9849289f547SJohn Baldwin const char * 9859289f547SJohn Baldwin sysdecode_whence(int whence) 9869289f547SJohn Baldwin { 9879289f547SJohn Baldwin 9889289f547SJohn Baldwin return (lookup_value(seekwhence, whence)); 9899289f547SJohn Baldwin } 9909289f547SJohn Baldwin 9919289f547SJohn Baldwin const char * 9929289f547SJohn Baldwin sysdecode_fcntl_cmd(int cmd) 9939289f547SJohn Baldwin { 9949289f547SJohn Baldwin 9959289f547SJohn Baldwin return (lookup_value(fcntlcmd, cmd)); 9969289f547SJohn Baldwin } 9979289f547SJohn Baldwin 9989289f547SJohn Baldwin static struct name_table fcntl_fd_arg[] = { 9999289f547SJohn Baldwin X(FD_CLOEXEC) X(0) XEND 10009289f547SJohn Baldwin }; 10019289f547SJohn Baldwin 10029289f547SJohn Baldwin bool 10039289f547SJohn Baldwin sysdecode_fcntl_arg_p(int cmd) 10049289f547SJohn Baldwin { 10059289f547SJohn Baldwin 10069289f547SJohn Baldwin switch (cmd) { 10079289f547SJohn Baldwin case F_GETFD: 10089289f547SJohn Baldwin case F_GETFL: 10099289f547SJohn Baldwin case F_GETOWN: 10109289f547SJohn Baldwin return (false); 10119289f547SJohn Baldwin default: 10129289f547SJohn Baldwin return (true); 10139289f547SJohn Baldwin } 10149289f547SJohn Baldwin } 10159289f547SJohn Baldwin 10169289f547SJohn Baldwin void 10179289f547SJohn Baldwin sysdecode_fcntl_arg(FILE *fp, int cmd, uintptr_t arg, int base) 10189289f547SJohn Baldwin { 10199289f547SJohn Baldwin int rem; 10209289f547SJohn Baldwin 10219289f547SJohn Baldwin switch (cmd) { 10229289f547SJohn Baldwin case F_SETFD: 10239289f547SJohn Baldwin if (!print_value(fp, fcntl_fd_arg, arg)) 10249289f547SJohn Baldwin print_integer(fp, arg, base); 10259289f547SJohn Baldwin break; 10269289f547SJohn Baldwin case F_SETFL: 10279289f547SJohn Baldwin if (!sysdecode_fcntl_fileflags(fp, arg, &rem)) 10289289f547SJohn Baldwin fprintf(fp, "%#x", rem); 10299289f547SJohn Baldwin else if (rem != 0) 10309289f547SJohn Baldwin fprintf(fp, "|%#x", rem); 10319289f547SJohn Baldwin break; 10329289f547SJohn Baldwin case F_GETLK: 10339289f547SJohn Baldwin case F_SETLK: 10349289f547SJohn Baldwin case F_SETLKW: 10359289f547SJohn Baldwin fprintf(fp, "%p", (void *)arg); 10369289f547SJohn Baldwin break; 10379289f547SJohn Baldwin default: 10389289f547SJohn Baldwin print_integer(fp, arg, base); 10399289f547SJohn Baldwin break; 10409289f547SJohn Baldwin } 10419289f547SJohn Baldwin } 10429289f547SJohn Baldwin 10439289f547SJohn Baldwin bool 10449289f547SJohn Baldwin sysdecode_mmap_flags(FILE *fp, int flags, int *rem) 10459289f547SJohn Baldwin { 10469289f547SJohn Baldwin uintmax_t val; 10479289f547SJohn Baldwin bool printed; 10489289f547SJohn Baldwin int align; 10499289f547SJohn Baldwin 10509289f547SJohn Baldwin /* 10519289f547SJohn Baldwin * MAP_ALIGNED can't be handled directly by print_mask_int(). 10529289f547SJohn Baldwin * MAP_32BIT is also problematic since it isn't defined for 10539289f547SJohn Baldwin * all platforms. 10549289f547SJohn Baldwin */ 10559289f547SJohn Baldwin printed = false; 10569289f547SJohn Baldwin align = flags & MAP_ALIGNMENT_MASK; 10579289f547SJohn Baldwin val = (unsigned)flags & ~MAP_ALIGNMENT_MASK; 10589289f547SJohn Baldwin print_mask_part(fp, mmapflags, &val, &printed); 10599289f547SJohn Baldwin #ifdef MAP_32BIT 10609289f547SJohn Baldwin if (val & MAP_32BIT) { 10619289f547SJohn Baldwin fprintf(fp, "%sMAP_32BIT", printed ? "|" : ""); 10629289f547SJohn Baldwin printed = true; 10639289f547SJohn Baldwin val &= ~MAP_32BIT; 10649289f547SJohn Baldwin } 10659289f547SJohn Baldwin #endif 10669289f547SJohn Baldwin if (align != 0) { 10679289f547SJohn Baldwin if (printed) 10689289f547SJohn Baldwin fputc('|', fp); 10699289f547SJohn Baldwin if (align == MAP_ALIGNED_SUPER) 10709289f547SJohn Baldwin fputs("MAP_ALIGNED_SUPER", fp); 10719289f547SJohn Baldwin else 10729289f547SJohn Baldwin fprintf(fp, "MAP_ALIGNED(%d)", 10739289f547SJohn Baldwin align >> MAP_ALIGNMENT_SHIFT); 10749289f547SJohn Baldwin printed = true; 10759289f547SJohn Baldwin } 10769289f547SJohn Baldwin if (rem != NULL) 10779289f547SJohn Baldwin *rem = val; 10789289f547SJohn Baldwin return (printed); 10799289f547SJohn Baldwin } 10809289f547SJohn Baldwin 10819289f547SJohn Baldwin const char * 108239a3a438SJohn Baldwin sysdecode_pathconf_name(int name) 108339a3a438SJohn Baldwin { 108439a3a438SJohn Baldwin 108539a3a438SJohn Baldwin return (lookup_value(pathconfname, name)); 108639a3a438SJohn Baldwin } 108739a3a438SJohn Baldwin 108839a3a438SJohn Baldwin const char * 10899289f547SJohn Baldwin sysdecode_rtprio_function(int function) 10909289f547SJohn Baldwin { 10919289f547SJohn Baldwin 10929289f547SJohn Baldwin return (lookup_value(rtpriofuncs, function)); 10939289f547SJohn Baldwin } 10949289f547SJohn Baldwin 10959289f547SJohn Baldwin bool 10969289f547SJohn Baldwin sysdecode_msg_flags(FILE *fp, int flags, int *rem) 10979289f547SJohn Baldwin { 10989289f547SJohn Baldwin 10999289f547SJohn Baldwin return (print_mask_0(fp, msgflags, flags, rem)); 11009289f547SJohn Baldwin } 11019289f547SJohn Baldwin 11029289f547SJohn Baldwin const char * 11039289f547SJohn Baldwin sysdecode_sigcode(int sig, int si_code) 11049289f547SJohn Baldwin { 11059289f547SJohn Baldwin const char *str; 11069289f547SJohn Baldwin 11079289f547SJohn Baldwin str = lookup_value(sigcode, si_code); 11089289f547SJohn Baldwin if (str != NULL) 11099289f547SJohn Baldwin return (str); 11109289f547SJohn Baldwin 11119289f547SJohn Baldwin switch (sig) { 11129289f547SJohn Baldwin case SIGILL: 11139289f547SJohn Baldwin return (sysdecode_sigill_code(si_code)); 11149289f547SJohn Baldwin case SIGBUS: 11159289f547SJohn Baldwin return (sysdecode_sigbus_code(si_code)); 11169289f547SJohn Baldwin case SIGSEGV: 11179289f547SJohn Baldwin return (sysdecode_sigsegv_code(si_code)); 11189289f547SJohn Baldwin case SIGFPE: 11199289f547SJohn Baldwin return (sysdecode_sigfpe_code(si_code)); 11209289f547SJohn Baldwin case SIGTRAP: 11219289f547SJohn Baldwin return (sysdecode_sigtrap_code(si_code)); 11229289f547SJohn Baldwin case SIGCHLD: 11239289f547SJohn Baldwin return (sysdecode_sigchld_code(si_code)); 11249289f547SJohn Baldwin default: 11259289f547SJohn Baldwin return (NULL); 11269289f547SJohn Baldwin } 11279289f547SJohn Baldwin } 11289289f547SJohn Baldwin 112939a3a438SJohn Baldwin const char * 113039a3a438SJohn Baldwin sysdecode_sysarch_number(int number) 113139a3a438SJohn Baldwin { 113239a3a438SJohn Baldwin 113339a3a438SJohn Baldwin return (lookup_value(sysarchnum, number)); 113439a3a438SJohn Baldwin } 113539a3a438SJohn Baldwin 11369289f547SJohn Baldwin bool 11379289f547SJohn Baldwin sysdecode_umtx_cvwait_flags(FILE *fp, u_long flags, u_long *rem) 11389289f547SJohn Baldwin { 11399289f547SJohn Baldwin 11409289f547SJohn Baldwin return (print_mask_0ul(fp, umtxcvwaitflags, flags, rem)); 11419289f547SJohn Baldwin } 11429289f547SJohn Baldwin 11439289f547SJohn Baldwin bool 11449289f547SJohn Baldwin sysdecode_umtx_rwlock_flags(FILE *fp, u_long flags, u_long *rem) 11459289f547SJohn Baldwin { 11469289f547SJohn Baldwin 11479289f547SJohn Baldwin return (print_mask_0ul(fp, umtxrwlockflags, flags, rem)); 11489289f547SJohn Baldwin } 11499289f547SJohn Baldwin 11509289f547SJohn Baldwin void 11519289f547SJohn Baldwin sysdecode_cap_rights(FILE *fp, cap_rights_t *rightsp) 11529289f547SJohn Baldwin { 11539289f547SJohn Baldwin struct name_table *t; 1154c9c69ebaSEd Maste int i; 11559289f547SJohn Baldwin bool comma; 11569289f547SJohn Baldwin 1157c9c69ebaSEd Maste for (i = 0; i < CAPARSIZE(rightsp); i++) { 1158c9c69ebaSEd Maste if (CAPIDXBIT(rightsp->cr_rights[i]) != 1 << i) { 1159c9c69ebaSEd Maste fprintf(fp, "invalid cap_rights_t"); 1160c9c69ebaSEd Maste return; 1161c9c69ebaSEd Maste } 1162c9c69ebaSEd Maste } 11639289f547SJohn Baldwin comma = false; 11649289f547SJohn Baldwin for (t = caprights; t->str != NULL; t++) { 11653c047740STobias Kortkamp if (cap_rights_is_set(rightsp, t->val)) { 11669289f547SJohn Baldwin fprintf(fp, "%s%s", comma ? "," : "", t->str); 11679289f547SJohn Baldwin comma = true; 11689289f547SJohn Baldwin } 11699289f547SJohn Baldwin } 11709289f547SJohn Baldwin } 1171a62bf68dSMichael Tuexen 1172a826eb5aSMichael Tuexen static struct name_table cmsgtypeip[] = { 1173a826eb5aSMichael Tuexen X(IP_RECVDSTADDR) X(IP_RECVTTL) X(IP_RECVOPTS) X(IP_RECVRETOPTS) 1174a826eb5aSMichael Tuexen X(IP_RECVIF) X(IP_RECVTOS) X(IP_FLOWID) X(IP_FLOWTYPE) 1175a826eb5aSMichael Tuexen X(IP_RSSBUCKETID) XEND 1176a826eb5aSMichael Tuexen }; 1177a826eb5aSMichael Tuexen 1178a826eb5aSMichael Tuexen static struct name_table cmsgtypeipv6[] = { 1179a826eb5aSMichael Tuexen #if 0 1180a826eb5aSMichael Tuexen /* The RFC 2292 defines are kernel space only. */ 1181a826eb5aSMichael Tuexen X(IPV6_2292PKTINFO) X(IPV6_2292HOPLIMIT) X(IPV6_2292HOPOPTS) 1182a826eb5aSMichael Tuexen X(IPV6_2292DSTOPTS) X(IPV6_2292RTHDR) X(IPV6_2292NEXTHOP) 1183a826eb5aSMichael Tuexen #endif 1184a826eb5aSMichael Tuexen X(IPV6_PKTINFO) X(IPV6_HOPLIMIT) X(IPV6_HOPOPTS) 1185a826eb5aSMichael Tuexen X(IPV6_DSTOPTS) X(IPV6_RTHDR) X(IPV6_NEXTHOP) 1186a826eb5aSMichael Tuexen X(IPV6_TCLASS) X(IPV6_FLOWID) X(IPV6_FLOWTYPE) X(IPV6_RSSBUCKETID) 1187a826eb5aSMichael Tuexen X(IPV6_PATHMTU) X(IPV6_RTHDRDSTOPTS) X(IPV6_USE_MIN_MTU) 1188a826eb5aSMichael Tuexen X(IPV6_DONTFRAG) X(IPV6_PREFER_TEMPADDR) XEND 1189a826eb5aSMichael Tuexen }; 1190a826eb5aSMichael Tuexen 1191a826eb5aSMichael Tuexen static struct name_table cmsgtypesctp[] = { 1192a826eb5aSMichael Tuexen X(SCTP_INIT) X(SCTP_SNDRCV) X(SCTP_EXTRCV) X(SCTP_SNDINFO) 1193a826eb5aSMichael Tuexen X(SCTP_RCVINFO) X(SCTP_NXTINFO) X(SCTP_PRINFO) X(SCTP_AUTHINFO) 1194a826eb5aSMichael Tuexen X(SCTP_DSTADDRV4) X(SCTP_DSTADDRV6) XEND 1195a826eb5aSMichael Tuexen }; 1196a826eb5aSMichael Tuexen 1197a826eb5aSMichael Tuexen const char * 1198a826eb5aSMichael Tuexen sysdecode_cmsg_type(int cmsg_level, int cmsg_type) 1199a826eb5aSMichael Tuexen { 1200a826eb5aSMichael Tuexen 1201a826eb5aSMichael Tuexen if (cmsg_level == SOL_SOCKET) 1202a826eb5aSMichael Tuexen return (lookup_value(cmsgtypesocket, cmsg_type)); 1203a826eb5aSMichael Tuexen if (cmsg_level == IPPROTO_IP) 1204a826eb5aSMichael Tuexen return (lookup_value(cmsgtypeip, cmsg_type)); 1205a826eb5aSMichael Tuexen if (cmsg_level == IPPROTO_IPV6) 1206a826eb5aSMichael Tuexen return (lookup_value(cmsgtypeipv6, cmsg_type)); 1207a826eb5aSMichael Tuexen if (cmsg_level == IPPROTO_SCTP) 1208a826eb5aSMichael Tuexen return (lookup_value(cmsgtypesctp, cmsg_type)); 1209a826eb5aSMichael Tuexen return (NULL); 1210a826eb5aSMichael Tuexen } 1211a826eb5aSMichael Tuexen 1212a62bf68dSMichael Tuexen const char * 1213a62bf68dSMichael Tuexen sysdecode_sctp_pr_policy(int policy) 1214a62bf68dSMichael Tuexen { 1215a62bf68dSMichael Tuexen 1216a62bf68dSMichael Tuexen return (lookup_value(sctpprpolicy, policy)); 1217a62bf68dSMichael Tuexen } 12181e6455d8SMichael Tuexen 12190faae8b9SMichael Tuexen static struct name_table sctpsndflags[] = { 12200faae8b9SMichael Tuexen X(SCTP_EOF) X(SCTP_ABORT) X(SCTP_UNORDERED) X(SCTP_ADDR_OVER) 1221bac4817bSMichael Tuexen X(SCTP_SENDALL) X(SCTP_EOR) X(SCTP_SACK_IMMEDIATELY) XEND 12220faae8b9SMichael Tuexen }; 12230faae8b9SMichael Tuexen 12240faae8b9SMichael Tuexen bool 12250faae8b9SMichael Tuexen sysdecode_sctp_snd_flags(FILE *fp, int flags, int *rem) 12260faae8b9SMichael Tuexen { 12270faae8b9SMichael Tuexen 12280faae8b9SMichael Tuexen return (print_mask_int(fp, sctpsndflags, flags, rem)); 12290faae8b9SMichael Tuexen } 12300faae8b9SMichael Tuexen 12310faae8b9SMichael Tuexen static struct name_table sctprcvflags[] = { 12320faae8b9SMichael Tuexen X(SCTP_UNORDERED) XEND 12330faae8b9SMichael Tuexen }; 12340faae8b9SMichael Tuexen 12350faae8b9SMichael Tuexen bool 12360faae8b9SMichael Tuexen sysdecode_sctp_rcv_flags(FILE *fp, int flags, int *rem) 12370faae8b9SMichael Tuexen { 12380faae8b9SMichael Tuexen 12390faae8b9SMichael Tuexen return (print_mask_int(fp, sctprcvflags, flags, rem)); 12400faae8b9SMichael Tuexen } 12410faae8b9SMichael Tuexen 12420faae8b9SMichael Tuexen static struct name_table sctpnxtflags[] = { 12430faae8b9SMichael Tuexen X(SCTP_UNORDERED) X(SCTP_COMPLETE) X(SCTP_NOTIFICATION) XEND 12440faae8b9SMichael Tuexen }; 12450faae8b9SMichael Tuexen 12460faae8b9SMichael Tuexen bool 12470faae8b9SMichael Tuexen sysdecode_sctp_nxt_flags(FILE *fp, int flags, int *rem) 12480faae8b9SMichael Tuexen { 12490faae8b9SMichael Tuexen 12500faae8b9SMichael Tuexen return (print_mask_int(fp, sctpnxtflags, flags, rem)); 12510faae8b9SMichael Tuexen } 12520faae8b9SMichael Tuexen 12531e6455d8SMichael Tuexen static struct name_table sctpsinfoflags[] = { 12541e6455d8SMichael Tuexen X(SCTP_EOF) X(SCTP_ABORT) X(SCTP_UNORDERED) X(SCTP_ADDR_OVER) 12551e6455d8SMichael Tuexen X(SCTP_SENDALL) X(SCTP_EOR) X(SCTP_SACK_IMMEDIATELY) XEND 12561e6455d8SMichael Tuexen }; 12571e6455d8SMichael Tuexen 12581e6455d8SMichael Tuexen void 12591e6455d8SMichael Tuexen sysdecode_sctp_sinfo_flags(FILE *fp, int sinfo_flags) 12601e6455d8SMichael Tuexen { 12611e6455d8SMichael Tuexen const char *temp; 12621e6455d8SMichael Tuexen int rem; 12631e6455d8SMichael Tuexen bool printed; 12641e6455d8SMichael Tuexen 12651e6455d8SMichael Tuexen printed = print_mask_0(fp, sctpsinfoflags, sinfo_flags, &rem); 12661e6455d8SMichael Tuexen if (rem & ~SCTP_PR_SCTP_ALL) { 12671e6455d8SMichael Tuexen fprintf(fp, "%s%#x", printed ? "|" : "", rem & ~SCTP_PR_SCTP_ALL); 12681e6455d8SMichael Tuexen printed = true; 12691e6455d8SMichael Tuexen rem &= ~SCTP_PR_SCTP_ALL; 12701e6455d8SMichael Tuexen } 12711e6455d8SMichael Tuexen if (rem != 0) { 12721e6455d8SMichael Tuexen temp = sysdecode_sctp_pr_policy(rem); 12731e6455d8SMichael Tuexen if (temp != NULL) { 12741e6455d8SMichael Tuexen fprintf(fp, "%s%s", printed ? "|" : "", temp); 12751e6455d8SMichael Tuexen } else { 12761e6455d8SMichael Tuexen fprintf(fp, "%s%#x", printed ? "|" : "", rem); 12771e6455d8SMichael Tuexen } 12781e6455d8SMichael Tuexen } 12791e6455d8SMichael Tuexen } 1280c70019ddSKyle Evans 1281c70019ddSKyle Evans bool 1282c70019ddSKyle Evans sysdecode_shmflags(FILE *fp, int flags, int *rem) 1283c70019ddSKyle Evans { 1284c70019ddSKyle Evans 1285c70019ddSKyle Evans return (print_mask_0(fp, shmflags, flags, rem)); 1286c70019ddSKyle Evans } 1287